我正在使用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);
}
我错过了什么?
答案 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]);
}