【问题标题】:JavaScript RegExp matching group takes unwanted parentheses [duplicate]JavaScript RegExp 匹配组采用不需要的括号 [重复]
【发布时间】:2013-11-03 10:11:29
【问题描述】:

我收到如下文字:do[A]and[B]

我想提取由 [] 包裹的所有单词。
我正在使用 match 方法:

var text = "do[A]and[B]";
var regexp = /\[(\w+)\]/g;
var result = text.match(regexp);

所以我说我想匹配由 [ ] 包裹的所有单词,但只有被包裹的部分应该在组/内存中。我不断在结果中得到 [ ] 括号:

["[A]", "[B]"]

预期结果是

["A","B"]

我认为这是小菜一碟,但我一定错过了什么。

【问题讨论】:

  • @Barmar:谢谢,有时很难找到正确的搜索关键字

标签: javascript regex


【解决方案1】:

对于这种特殊情况,您不需要捕获组:

>>> "do[A]and[Bbbb]".match(/\w+(?=])/g);
["A", "Bbbb"]

会的。

【讨论】:

    【解决方案2】:

    为了使用子模式,没有简单的捷径。

    相反,您必须在字符串上重复执行正则表达式并收集您想要的子模式。像这样的:

    var text = "do[A]and[B]",
        regexp = /\[(\w+)\]/g,
        result = [], match;
    while(match = regexp.exec(text)) {
        result.push(match[1]);
    }
    

    【讨论】:

    • 嗯,这令人失望 - 来自 JS,而不是你 :) 感谢您的回答,我会这样尝试。
    • 如果 JS 有lookbehinds,你可以只做/(?<\[)\w+(?=\])/g,但遗憾的是它没有。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-11
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    相关资源
    最近更新 更多