g
正则表达式中的标志是什么意思?
什么是之间的区别/.+/g
和/.+/
?
g
正则表达式中的标志是什么意思?
什么是之间的区别/.+/g
和/.+/
?
g
用于全局搜索。这意味着它将匹配所有出现的事件。您通常还会看到i
这意味着忽略大小写。
“g”标志表示应该针对字符串中的所有可能匹配项测试正则表达式。
没有g
标志,它只会测试第一个。
Javascript中的例子来解释:
> 'aaa'.match(/a/g)
[ 'a', 'a', 'a' ]
> 'aaa'.match(/a/)
[ 'a', index: 0, input: 'aaa' ]
g
是全局搜索标志。
全局搜索标志使 RegExp 在整个字符串中搜索模式,创建一个数组,其中包含它可以找到的与给定模式匹配的所有匹配项。
所以之间的差异 /.+/g
,并/.+/
是该g
版本会发现每一次出现,而不只是第一个。
正如@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
和之间没有区别,/.+/
因为它们都只会匹配整个字符串一次。的g
有差别如果正则表达式可以匹配多于一次或含有基团,在这种情况下.match()
将返回匹配的数组代替组的阵列。