javascript - 如何在具有多个匹配项的 JavaScript RegEx 中仅返回捕获的组

标签 javascript regex

简化示例:

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

返回

["notthis123end", "123"]

我正在拍摄

["123", "45"]

我所想到的就是将 RE 放在 RegExp 对象中并在 exec 周围运行 while 循环,这看起来有点傻,或者使用 匹配,但返回整个匹配,而不仅仅是捕获的部分。

最佳答案

您的正则表达式似乎运行良好。问题在于对输出的解释。

  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);
    }
    

    注意:将 RegEx 存储在这样的变量中并使用循环很重要。因为,为了获得多个匹配项,JavaScript RegEx 实现将匹配项的当前索引存储在 RegEx 对象本身中。因此,下次 exec 被调用时,它会从它离开的地方开始。如果我们按原样使用 RegEx 文字,那么我们将陷入无限循环,因为它总是从头开始。

  2. result of exec方法必须这样解释,第一个值是整个匹配项,下一个元素向前我们得到匹配项内的组。在这个正则表达式中,我们只有一组。因此,我们使用 match[1] 访问它。

关于javascript - 如何在具有多个匹配项的 JavaScript RegEx 中仅返回捕获的组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22581979/

相关文章:

javascript - 嵌套for循环同时更新3个变量

javascript - 在 Bootstrap 中将参数传递给模态

javascript - 小屏幕的 scaleY 属性未正确维护

javascript - 如何使用 javascript 访问其他 HTML 表单中的一个 HTML 表单元素?

c# - 为什么替代项的顺序在正则表达式中很重要?

R正则表达式不匹配所有连字符

c++ - std::regex_constants::optimize 使用的优化技术

Javascript regExp 接受小数点前 12 位数字和小数点后两位数字

java - 将行分割为单词数组

javascript - JavaScript 中运行命令的顺序