回答:
g
グローバル検索用です。つまり、すべての出現に一致します。通常は、i
大文字と小文字を区別しないこともわかります。
リファレンス:グローバル-JavaScript | MDN
「g」フラグは、正規表現を文字列内のすべての可能な一致に対してテストする必要があることを示します。
なければg
フラグ、それだけで最初のためにテストします。
var r = /a/g; console.log(r.test('a'), r.test('a')); // true false
@matiskaが指摘したように、g
フラグはlastIndex
プロパティも設定します。
これの非常に重要な副作用は、一致する文字列に対して同じ正規表現インスタンスを再利用している場合、でのみ検索を開始するため、最終的には失敗し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);
すでに述べたg
フラグの意味に加えて、それはregexp.lastIndex
プロパティに影響を与えます:
lastIndexは、正規表現インスタンスの読み取り/書き込み整数プロパティで、次の一致を開始するインデックスを指定します。(...)このプロパティは、正規表現インスタンスが「g」フラグを使用してグローバル検索を示す場合にのみ設定されます。
リファレンス:Mozilla Developer Network
g
->
すべての一致を返しますwithout g
->
最初の一致を返します例:
'1 2 1 5 6 7'.match(/\d+/)
を返します["1", index: 0, input: "1 2 1 5 6 7", groups: undefined]
。ご覧のように、最初の試合しか行えません"1"
。'1 2 1 5 6 7'.match(/\d+/g)
すべての一致の配列を返します["1", "2", "1", "5", "6", "7"]
。