简化示例:
/not(?:this|that)(.*?)end/ig.exec('notthis123end notthat45end')
回报
["notthis123end", "123"]
我正在拍摄
["123", "45"]
我已经想到的是将RE放在一个RegExp对象中并围绕exec它运行一个while循环,这似乎有点傻,或者使用match,但是回到整个匹配,而不仅仅是捕获的部分.
the*_*eye 21
您的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);
}
Run Code Online (Sandbox Code Playgroud)
注意:将RegEx存储在这样的变量中很重要,并使用循环.因为,为了获得多个匹配,JavaScript RegEx实现,将匹配的当前索引存储在RegEx对象本身中.因此,下一次exec被称为它从它离开的地方开始.如果我们按原样使用RegEx文字,那么我们将以无限循环结束,因为它将始终从头开始.
方法的结果exec必须像这样解释,第一个值是整个匹配,然后是下一个元素,我们得到匹配内的组.在本RegEx中,我们只有一个组.所以,我们访问它match[1].