Javascript 用于捕获组的正则表达式';返回值

Javascript 用于捕获组的正则表达式';返回值,javascript,regex,Javascript,Regex,正则表达式是 'Gogogo now!'。匹配(/(go)+/i) 不带g标志的match方法将返回所有捕获组,据我所知,表达式将返回 ['Gogogo','Go','Gogo','Gogogo'] 但是当我执行表达式时,它的返回值是 [“Gogogo”,“go”] 谁能给我解释一下原因吗?这里是一个解释和演示 请注意这部分解释: 重复捕获组将只捕获最后一次迭代。在重复组周围放置一个捕获组以捕获所有迭代,或者如果您对数据不感兴趣,则使用非捕获组 结果数组包含完全匹配(Gogogo)和最后

正则表达式是

'Gogogo now!'。匹配(/(go)+/i)
不带g标志的match方法将返回所有捕获组,据我所知,表达式将返回

['Gogogo','Go','Gogo','Gogogo']
但是当我执行表达式时,它的返回值是

[“Gogogo”,“go”]

谁能给我解释一下原因吗?

这里是一个解释和演示

请注意这部分解释:

重复捕获组将只捕获最后一次迭代。在重复组周围放置一个捕获组以捕获所有迭代,或者如果您对数据不感兴趣,则使用非捕获组

结果数组包含完全匹配(
Gogogo
)和最后一次迭代(
go

不带g标志的match方法将返回所有捕获组

不,那不是真的。在Javascript中,当重复捕获组时,只返回最后一次捕获。
g
标志在这里是不相关的。有关更多信息,请参阅

那么为什么
match()
返回一个包含两个元素的数组?

通知您返回值为:

一种数组,其内容取决于 全局(g)标志,如果未找到匹配项,则为null

  • 如果使用g标志,则将返回与完整正则表达式匹配的所有结果,但不会返回捕获组
  • 如果不使用g标志,则仅返回第一个完整匹配及其相关捕获组。在本例中,返回的项目 将具有如下所述的其他属性
因此,在您的示例中,返回的数组包含以下两个元素:

  • 全场比赛

  • 第1组捕获的最后一次捕获


  • “不带g标志的匹配方法将返回所有捕获组”,也就是说,如果没有
    g
    ,它将只返回一个结果。
    g
    标志表示查找所有结果。你的理解是现实的对立面,它的相关捕捉群体意味着什么?嗯,考虑一种模式,比如“代码> A(B)(C)< /代码>。它包含两个捕获组。因此,当与“abc”匹配时,如果未使用
    g
    标志,则返回的数组将包括两个组以及完全匹配(即
    ['abc','b','c']
    ),如果使用
    g
    标志,则返回的数组将仅包括完全匹配(即
    'abc'
    )。另一方面,您的模式只有一个捕获组(请记住,重复捕获组仅计为一个;最后一次捕获)。