正则expression式中“g”标志的含义是什么?
正则expression式中g
标志的含义是什么?
/.+/g
和/.+/
什么/.+/
?
g
是全球search。 意味着它会匹配所有的事件。 你通常也会看到i
意味着忽略大小写。
参考: 全局 – JavaScript | MDN
“g”标志表示正则expression式应该针对string中所有可能的匹配进行testing。
没有g
标志,它只会testing第一个。
在Javascript中的示例来解释:
> 'aaa'.match(/a/g) [ 'a', 'a', 'a' ] > 'aaa'.match(/a/) [ 'a', index: 0, input: 'aaa' ]
g
是全局search标志。
全局search标志使得RegExp在整个string中search一个模式,创build一个匹配给定模式的所有匹配项的数组。
因此,/. /.+/g
/ g
和/.+/
之间的区别在于g
版本将会查找每个出现的地址而不是第一个。
/.+/g
和/.+/
没有区别,因为它们只能匹配整个string一次。 如果正则expression式可以匹配不止一次或包含组,则g
会有所不同,在这种情况下, .match()
将返回匹配数组而不是组的数组。
除了已经提到的g
标志的含义,它会影响regexp.lastIndex
属性:
lastIndex是正则expression式实例的读/写整数属性,指定开始下一个匹配的索引。 (…)仅当正则expression式实例使用“g”标志指示全局search时才设置此属性。
参考: Mozilla开发者networking
G在正则expression式中定义了一个全局search,这意味着它将search所有行上的所有实例。
正如@matiska指出的那样, g
标志也设置了lastIndex
属性。
这是一个非常重要的副作用,如果你正在重复使用相同的正则expression式实例对匹配的string,它最终将失败,因为它只开始在lastIndex
search。
// 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);