Answers:
g
用于全局搜索。这意味着它将匹配所有出现的事件。您通常还会看到i
这意味着忽略大小写。
“ g”标志指示应针对字符串中所有可能的匹配项测试正则表达式。
没有g
标志,它将仅测试第一个。
var r = /a/g; console.log(r.test('a'), r.test('a')); // true false
正如@matiska指出的那样,该g
标志lastIndex
也会设置该属性。
这样做的一个非常重要的副作用是,如果您对匹配的字符串重复使用同一个regex实例,则该实例最终将失败,因为它仅在处开始搜索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”标志指示全局搜索时才设置此属性。
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"]
。