繁体   English   中英

Javascript - 在方括号之间返回字符串

[英]Javascript - return string between square brackets

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

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

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

Some text with [some important info]

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

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

var matches = mystring.match(/\[(.*?)\]/);

if (matches) {
    var submatch = matches[1];
}

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

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

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

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

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

详情

  • (?<=\\[) - 匹配紧跟在[字符之前的位置的正向后视(即这需要[字符立即出现在当前位置的左侧)
  • [^\\][]* - 除[]之外的零个或多个 ( * ) 字符(注意([^\\][]*)版本与捕获到 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 );

您是否尝试捕获括号:

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

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

只需使用replacemap

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

你不能。 Javascript 不支持后视。

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

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

"\\[.*?]"

或者更好的是,这个:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM