【问题标题】:Javascript - return string between square bracketsJavascript - 在方括号之间返回字符串
【发布时间】:2010-12-02 08:34:06
【问题描述】:

我只需要返回字符串中方括号内的文本。我有以下正则表达式,但这也返回方括号:

var matched = mystring.match("\\[.*]");

一个字符串只会包含一组方括号,例如:

Some text with [some important info]

我希望匹配包含“一些重要信息”,而不是我目前得到的“[一些重要信息]”。

【问题讨论】:

    标签: javascript regex string


    【解决方案1】:

    使用分组。我添加了一个? 以使匹配“不贪婪”,因为这可能是您想要的。

    var matches = mystring.match(/\[(.*?)\]/);
    
    if (matches) {
        var submatch = matches[1];
    }
    

    【讨论】:

    • 感谢这件事让我找到方括号之间的数字。如何将另一个数字而不是那个数字放在方括号之间的那个地方?提前谢谢你
    【解决方案2】:

    由于 javascript 不支持捕获,因此您必须绕过它。考虑采用相反方法的替代方案。而是捕获括号内的内容,删除括号外的内容。由于只有一组括号,它应该可以正常工作。我通常使用这种技术来去除前导和尾随空格。

    mystring.replace( /(^.*\[|\].*$)/g, '' );
    

    【讨论】:

    • 如果后面有新行,则在末尾添加 )。
    【解决方案3】:

    要匹配两个相邻的左方括号和右方括号之间的任何文本,您可以使用以下模式:

    \[([^\][]*)]
    (?<=\[)[^\][]*(?=])
    

    请参阅 regex demo #1regex demo #2注意:符合 ECMAScript 2018 的 JavaScript 环境支持第二个带有环视的正则表达式。如果需要支持较旧的环境,请使用第一个带有捕获组的正则表达式。

    详情

    • (?&lt;=\[) - 正向后视,匹配紧接在 [ 字符前面的位置(即,这要求 [ 字符紧邻当前位置的左侧出现)
    • [^\][]* - 除了 [] 之外的零个或多个 (*) 字符(请注意,([^\][]*) 版本是相同的模式捕获到 ID 为 1 的捕获组中)
    • (?=]) - 与紧跟在 ] 字符后的位置相匹配的正向前瞻(即,这要求 ] 字符立即出现在当前正则表达式索引位置的右侧)。

    现在,在代码中,您可以使用以下内容:

    const text = "[Some text] ][with[ [some important info]";
    console.log( text.match(/(?<=\[)[^\][]*(?=])/g) );
    console.log( Array.from(text.matchAll(/\[([^\][]*)]/g), x => x[1]) );
    // Both return ["Some text", "some important info"]

    这是一种在循环中使用RegExp#exec 提取捕获的子字符串的传统方法:

    var text = "[Some text] ][with[ [some important info]";
    var regex = /\[([^\][]*)]/g;
    var results=[], m;
    while ( m = regex.exec(text) ) {
      results.push(m[1]);
    }
    console.log( results );

    【讨论】:

      【解决方案4】:

      您是否尝试过捕获括号:

      ("\\[(.*)]");
      

      这应该将括号内的模式作为返回数组中的捕获匹配返回

      【讨论】:

        【解决方案5】:

        只需使用replacemap

        "blabla (some info) blabla".match(/\((.*?)\)/g).map(b=>b.replace(/\(|(.*?)\)/g,"$1"))
        

        【讨论】:

          【解决方案6】:

          你不能。 Javascript 不支持lookbehinds。

          您必须使用捕获组或修剪括号。

          顺便说一句,您可能不希望您的正则表达式中有一个贪婪的.*。试试这个:

          "\\[.*?]"
          

          或者更好,这个:

          "\\[[^\\]]*]"
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2015-10-16
            • 2012-10-26
            • 2015-02-26
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多