正则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,它最终将失败,因为它只开始在lastIndexsearch。

 // 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);