简化示例:
/not(?:this|that)(.*?)end/ig.exec('notthis123end notthat45end')
返回
["notthis123end", "123"]
我正在拍摄
["123", "45"]
我所想到的就是将 RE 放在 RegExp
对象中并在 exec
周围运行 while 循环,这看起来有点傻,或者使用 匹配
,但返回整个匹配,而不仅仅是捕获的部分。
最佳答案
您的正则表达式似乎运行良好。问题在于对输出的解释。
要获得 RegEx 的多个匹配项,您应该这样做,就像这样
var regEx = /not(?:this|that)(.*?)end/ig; var data = "notthis123end notthat45end"; var match = regEx.exec(data); while(match !== null) { console.log(match[1]); match = regEx.exec(data); }
注意:将 RegEx 存储在这样的变量中并使用循环很重要。因为,为了获得多个匹配项,JavaScript RegEx 实现将匹配项的当前索引存储在 RegEx 对象本身中。因此,下次
exec
被调用时,它会从它离开的地方开始。如果我们按原样使用 RegEx 文字,那么我们将陷入无限循环,因为它总是从头开始。result of
exec
方法必须这样解释,第一个值是整个匹配项,下一个元素向前我们得到匹配项内的组。在这个正则表达式中,我们只有一组。因此,我们使用match[1]
访问它。
关于javascript - 如何在具有多个匹配项的 JavaScript RegEx 中仅返回捕获的组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22581979/