What is the meaning of the 'g' flag in regular expressions?

What is the meaning of the g flag in regular expressions?

What is is the difference between /.+/g and /.+/?


Solution 1:

g is for global search. Meaning it'll match all occurrences. You'll usually also see i which means ignore case.

Reference: global - JavaScript | MDN

The "g" flag indicates that the regular expression should be tested against all possible matches in a string.

Without the g flag, it'll only test for the first.

Solution 2:

Example in Javascript to explain:

> 'aaa'.match(/a/g)
[ 'a', 'a', 'a' ]

> 'aaa'.match(/a/)
[ 'a', index: 0, input: 'aaa' ]

Solution 3:

g is the global search flag.

The global search flag makes the RegExp search for a pattern throughout the string, creating an array of all occurrences it can find matching the given pattern.

So the difference between /.+/g and /.+/ is that the g version will find every occurrence instead of just the first.

Solution 4:

As @matiska pointed out, the g flag sets the lastIndex property as well.

A very important side effect of this is if you are reusing the same regex instance against a matching string, it will eventually fail because it only starts searching at the lastIndex.

// regular regex
const regex = /foo/;

// same regex with global flag
const regexG = /foo/g;

const str = " foo foo foo ";

const test = (r) => console.log(
    r,
    r.lastIndex,
    r.test(str),
    r.lastIndex
);

// Test the normal one 4 times (success)
test(regex);
test(regex);
test(regex);
test(regex);

// Test the global one 4 times
// (3 passes and a fail)
test(regexG);
test(regexG);
test(regexG);
test(regexG);