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

时间:2009-09-29 14:47:39

标签: javascript regex string

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

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

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

Some text with [some important info]

我想匹配包含'一些重要信息',而不是我目前得到的'[一些重要信息]。

6 个答案:

答案 0 :(得分:77)

使用分组。我添加了一个?来匹配“ungreedy”,因为这可能是你想要的。

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

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

答案 1 :(得分:13)

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

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

答案 2 :(得分:3)

你有没有尝试抓住parens:

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

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

答案 3 :(得分:3)

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

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

参见 regex demo #1regex demo #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 );

答案 4 :(得分:2)

只需使用replacemap

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

答案 5 :(得分:1)

你做不到。 Javascript不支持lookbehinds。

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

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

"\\[.*?]"

或者更好,这个:

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