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