为什么带括号的string.match(/(regexp)/)会返回两次匹配?

时间:2014-02-27 01:11:13

标签: javascript regex

为什么带括号的string.match( /(regexp)/ );会返回两次匹配?

例如:"abcdef".match(/(cd)/);返回cd的两个实例:["cd","cd"]

我查看了MDN documentation。它没有说多次返回比赛。

我甚至查看了ECMA docs

只需抓取[1]索引string.match()即可获得解决方法,但我在文档中找不到解释。

2 个答案:

答案 0 :(得分:5)

让我们按照RegExp.match

上的文档进行操作
  

如果正则表达式不包含g标志,则返回   与RegExp.exec(str)相同的结果。

好的,转到RegExp.exec

  

如果匹配成功,则exec方法返回一个数组并进行更新   正则表达式对象的属性。返回的数组有   将匹配的文字作为第一个项目,然后为每个项目添加一个项目   捕获匹配包含文本的括号   捕获。

答案 1 :(得分:1)

令人惊讶的是,MDN文档(现在这里是Wayback snapshot)确实对此保持沉默,但我敢打赌match首先返回整个匹配,就像RegExp.exec

enter image description here

这是一个测试:

"abcdef".match(/(bc).?(e)/)
=> ["bcde", "bc", "e"]