如何在多个匹配的JavaScript RegEx中仅返回捕获的组

swi*_*der 14 javascript regex

简化示例:

/not(?:this|that)(.*?)end/ig.exec('notthis123end notthat45end')

回报

["notthis123end", "123"]

我正在拍摄

["123", "45"]

我已经想到的是将RE放在一个RegExp对象中并围绕exec它运行一个while循环,这似乎有点傻,或者使用match,但是回到整个匹配,而不仅仅是捕获的部分.

the*_*eye 21

您的RegEx似乎工作正常.问题在于输出的解释.

  1. 要获得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文字,那么我们将以无限循环结束,因为它将始终从头开始.

  2. 方法的结果exec必须像这样解释,第一个值是整个匹配,然后是下一个元素,我们得到匹配内的组.在本RegEx中,我们只有一个组.所以,我们访问它match[1].