为什么带括号的string.match( /(regexp)/ );
会返回两次匹配?
例如:"abcdef".match(/(cd)/);
返回cd
的两个实例:["cd","cd"]
我查看了MDN documentation。它没有说多次返回比赛。
我甚至查看了ECMA docs。
只需抓取[1]
索引string.match()
即可获得解决方法,但我在文档中找不到解释。
答案 0 :(得分:5)
让我们按照RegExp.match
上的文档进行操作如果正则表达式不包含g标志,则返回 与RegExp.exec(str)相同的结果。
好的,转到RegExp.exec
如果匹配成功,则exec方法返回一个数组并进行更新 正则表达式对象的属性。返回的数组有 将匹配的文字作为第一个项目,然后为每个项目添加一个项目 捕获匹配包含文本的括号 捕获。
答案 1 :(得分:1)
令人惊讶的是,MDN文档(现在这里是Wayback snapshot)确实对此保持沉默,但我敢打赌match
首先返回整个匹配,就像RegExp.exec
这是一个测试:
"abcdef".match(/(bc).?(e)/)
=> ["bcde", "bc", "e"]