正则表达式在方括号之间抓取字符串

Posted

技术标签:

【中文标题】正则表达式在方括号之间抓取字符串【英文标题】:Regex to grab strings between square brackets 【发布时间】:2011-11-04 07:25:48 【问题描述】:

我有以下字符串:pass[1][2011-08-21][total_passes]

如何将方括号之间的项目提取到数组中?我试过了

match(/\[(.*?)\]/);

var s = 'pass[1][2011-08-21][total_passes]';
var result = s.match(/\[(.*?)\]/);

console.log(result);

但这只会返回[1]

不确定如何执行此操作.. 提前致谢。

【问题讨论】:

【参考方案1】:

你快到了,你只需要一个global match(注意/g标志):

match(/\[(.*?)\]/g);

示例:http://jsfiddle.net/kobi/Rbdj4/

如果你想要只捕获组的东西(来自MDN):

var s = "pass[1][2011-08-21][total_passes]";
var matches = [];

var pattern = /\[(.*?)\]/g;
var match;
while ((match = pattern.exec(s)) != null)

  matches.push(match[1]);

示例:http://jsfiddle.net/kobi/6a7XN/

另一个选项(我通常更喜欢)是滥用替换回调:

var matches = [];
s.replace(/\[(.*?)\]/g, function(g0,g1)matches.push(g1);)

示例:http://jsfiddle.net/kobi/6CEzP/

【讨论】:

这是返回我想要的字符串,但它们仍在括号内 我正在努力解析多行中的数组内容。这是示例。 `export const routes: Routes = [ path: '', pathMatch: 'full', redirectTo: 'tree' , path: 'components', redirectTo: 'components/tree' , path: 'components/tree ',组件:CstdTree ,路径:'组件/芯片',组件:CstdChips ];【参考方案2】:
var s = 'pass[1][2011-08-21][total_passes]';

r = s.match(/\[([^\]]*)\]/g);

r ; //# =>  [ '[1]', '[2011-08-21]', '[total_passes]' ]

example proving the edge case of unbalanced [];

var s = 'pass[1]]][2011-08-21][total_passes]';

r = s.match(/\[([^\]]*)\]/g);

r; //# =>  [ '[1]', '[2011-08-21]', '[total_passes]' ]

【讨论】:

【参考方案3】:

将全局标志添加到您的正则表达式,并迭代返回的数组。

 match(/\[(.*?)\]/g)

【讨论】:

【参考方案4】:

我不确定您是否可以将其直接放入数组中。但是下面的代码应该可以找到所有的出现然后处理它们:

var string = "pass[1][2011-08-21][total_passes]";
var regex = /\[([^\]]*)\]/g;

while (match = regex.exec(string)) 
   alert(match[1]);

请注意:我真的认为您在这里需要字符类 [^\]]。否则,在我的测试中,表达式将匹配孔字符串,因为 ] 也与 .* 匹配。

【讨论】:

【参考方案5】:
'pass[1][2011-08-21][total_passes]'.match(/\[.+?\]/g); // ["[1]","[2011-08-21]","[total_passes]"]

解释

\[       # match the opening [
           Note: \ before [ tells that do NOT consider as a grouping symbol.
   .+?   # Accept one or more character but NOT greedy
\]       # match the closing ] and again do NOT consider as a grouping symbol
/g       # do NOT stop after the first match. Do it for the whole input string.

您可以使用正则表达式的其他组合 https://regex101.com/r/IYDkNi/1

【讨论】:

【参考方案6】:

[C#]

        string str1 = " pass[1][2011-08-21][total_passes]";
        string matching = @"\[(.*?)\]";
        Regex reg = new Regex(matching);
        MatchCollection matches = reg.Matches(str1);

您可以使用 foreach 匹配字符串。

【讨论】:

以上是关于正则表达式在方括号之间抓取字符串的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式在Javascript中获取括号之间的字符串

学习正则表达式

正则表达式获取花括号之间的字符串

正则表达式匹配括号之间的内容

正则表达式提取方括号或大括号之间的文本

js-正则表达式