'str'.search(/pattern/) // returns index
/pattern/.test('str') // : boolean
/pattern/.exec('str') // return null or matches array ([0] is full string, [1].. is group


  • Be careful about the greedy matching .*, try to add ? to use lazy matching: .*?. See here

  • Positive lookahead (does incldue): (?=...)

  • Negative lookahead (not include multiple chars): (?!...)

    • to match a single char that's not in the list, you can use [^abc] (means match one char that's not a or b or c)

  • Positive lookbehind: (?<=...) NOTE JavaScript doens't have this. You can use negative lookahead


How to replace "name" : "basic" to "xxx" : "whatever you provided"?

using grouping for everything:

// c#
string input = "'name' : 'Basic'," ;
string find = "('name'\\s:\\s')(?<text>.*)(')" ;
string replace = "$1AA$2" ;
string result = Regex.Replace (input, find, replace);

Find the number after a certain word:


The lookbehind assertion (?<=foo_bar) is important because you don't want to include %download%# in your results, only the numbers after it.

How to make sure string 'po box' is not in the test string:

Use negative lookahead: /^(?!.*po\sBOX).*$/

How to find a pattern before a word:

Let's say we want to match and replace :user in the url Use We could use: /:user(?=\b)/, which will match the first :user and :user-name but not :userName.

Split using a maximum length (Ruby)

regex = /.{1,#{max_width}}/

Match string insdie single quotes

var result = [];
const pattern = /'([^',]+)'/g;
var match;
while(match = pattern.exec("'a','b', 'c'")) {

match a word

  • use word boundary: \b

  • be sure to be lazy (+?)

const re = /^\/(.+?)\b/;
re.exec('/abc/def')[1] // -> abc
re.exec('/abc-def')[1] // -> abc
re.exec('/abc_def')[1] // -> abc_def