简化示例:
/not(?:this|that)(.*?)end/ig.exec('notthis123end notthat45end')
返回
["notthis123end", "123"]
我正在拍摄
["123", "45"]
我所知道的就是把RE放在一个RegExp
对象中并围绕exec
运行一个while循环,这似乎有点傻,或者使用match
,但是回到整个比赛,而不仅仅是被捕获的部分。
答案 0 :(得分:20)
您的RegEx似乎工作正常。问题在于对输出的解释。
要获得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
方法必须像这样解释,第一个值是整个匹配,然后是下一个元素,我们得到匹配内的组。在本RegEx中,我们只有一个组。因此,我们使用match[1]
。