143

g正则表达式中的标志是什么意思?

/.+/g和 和有什么不一样/.+/

4

9 回答 9

157

g用于全局搜索。这意味着它将匹配所有事件。您通常还会看到i忽略大小写的意思。

参考:全球 - JavaScript | MDN

“g”标志表示应该针对字符串中所有可能的匹配项测试正则表达式。

没有g标志,它只会测试第一个。

于 2012-10-20T23:40:01.070 回答
56

Javascript中的示例来解释:

> 'aaa'.match(/a/g)
[ 'a', 'a', 'a' ]

> 'aaa'.match(/a/)
[ 'a', index: 0, input: 'aaa' ]
于 2013-07-27T23:50:36.693 回答
14

g是全局搜索标志。

全局搜索标志使正则表达式在整个字符串中搜索模式,创建一个它可以找到与给定模式匹配的所有匹配项的数组。

/.+/g所以和之间的区别在于 /.+/ 版本g会发现每一个出现而不是第一次出现。

于 2012-10-20T23:39:01.517 回答
13

正如@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);

于 2017-08-06T03:29:16.940 回答
11

和之间没有区别/.+/g/.+/因为它们都只会匹配整个字符串一次。如果正g则表达式可以匹配多次或包含组,则会有所不同,在这种情况下,.match()将返回匹配的数组而不是组的数组。

于 2012-10-21T00:11:44.770 回答
8

除了已经提到的g标志的含义外,它还影响regexp.lastIndex属性:

lastIndex 是正则表达式实例的读/写整数属性,它指定开始下一个匹配的索引。(...) 仅当正则表达式实例使用“g”标志指示全局搜索时才设置此属性。

参考:Mozilla 开发者网络

于 2016-09-09T10:14:51.760 回答
7
  1. g ->返回所有匹配项
  2. without g ->返回第一个匹配

例子:

  1. '1 2 1 5 6 7'.match(/\d+/)返回["1", index: 0, input: "1 2 1 5 6 7", groups: undefined]。如您所见,我们只能参加第一场比赛"1"
  2. '1 2 1 5 6 7'.match(/\d+/g)返回一个包含所有匹配项的数组["1", "2", "1", "5", "6", "7"]
于 2020-02-14T11:40:25.500 回答
3

正则表达式中的 G 定义了全局搜索,这意味着它将搜索所有行上的所有实例。

于 2013-01-21T03:25:44.960 回答
2

将基于字符串给出示例。如果我们想从字符串中删除所有出现。假设我们想从“hello world”中删除所有出现的“o”和“”

"hello world".replace(/o/g,'');
于 2018-11-15T14:12:54.813 回答