RegEx提取括号中的单词不起作用

时间:2016-11-16 03:46:45

标签: javascript regex string match exec

我正在使用RegEx和exec来提取单词,但它会返回完整的第一个匹配,而不是单独返回所有匹配。

字符串为'one two [three four] five [six] seven [nine ten]'。结果应该是'three four''six''nine ten',而不是'[three four] five [six] seven [nine ten]'

var text = "one two [three four] five [six] seven [nine ten]" 
var brackets = /\[([^]+)\]/g; 
var match; 
while (match = brackets.exec(text)) {
   console.log(match);
}

我错过了什么?

1 个答案:

答案 0 :(得分:2)

问题在于捕获组([^]+)

[^]+匹配任何字符,包括换行符,因为否定字符类中没有指定任何内容。

使用以下正则表达式

/\[([^[\]]+)\]/g

[^[\]]+:将匹配除方括号[]之外的一个或多个字符。



var text = "one two [three four] five [six] seven [nine ten]"
var brackets = /\[([^[\]]+)\]/g;
var match;
while (match = brackets.exec(text)) {
    console.log(match[1]);
}




您还可以使用/\[(.*?)\]/g,其中.*?将匹配]以外的任何内容。



var text = "one two [three four] five [six] seven [nine ten]"
var brackets = /\[(.*?)\]/g;
var match;
while (match = brackets.exec(text)) {
    console.log(match[1]);
}