Regex101与JavaScript String.match不一致

时间:2015-03-07 21:46:48

标签: javascript regex

此正则表达式/{(\w+)}/g应匹配花括号{}之间的每个单词。相反,我在Regex101 JavaScript engine Chrome控制台中获得了不同的结果。

regex 101 vs js engine

Regex101 按预期工作,.match函数在没有g标志的情况下工作,但是一旦我应用它就无法在花括号之间检索内容(它应该提取["asd","asd2"],然后提取["{asd}","{asd2}"]

为什么会这样?谢谢!

2 个答案:

答案 0 :(得分:6)

String.prototype.match函数返回所有匹配的数组,当' g'标志被添加到模式中。

您想使用RegExp.prototype.exec函数来获取捕获组:

exec()保存它在RegExp对象中找到的匹配的最后一个索引,并在下次运行时从那里继续。因此,您需要循环遍历字符串,直到函数返回null以获取所有匹配项。

Demo on JSFiddle

var str = "this {is} a {word} {test}";
var re = /{(\w+)}/g;
do{
var res = re.exec(str);
console.log(res);
} while( res );

答案 1 :(得分:0)

您可以尝试使用负向前瞻,然后使用您的模式,然后在结尾处使用正面的前瞻:

(\w+)(?=})

在控制台内导致此问题:

"{asd}{asd2}".match(/(\w+)(?=})/g); 

示例:

https://regex101.com/r/uL9rN0/1

输出:

Array [ "asd", "asd2" ]