此正则表达式/{(\w+)}/g
应匹配花括号{}
之间的每个单词。相反,我在Regex101 JavaScript engine和 Chrome控制台中获得了不同的结果。
Regex101 按预期工作,.match
函数在没有g
标志的情况下工作,但是一旦我应用它就无法在花括号之间检索内容(它应该提取["asd","asd2"]
,然后提取["{asd}","{asd2}"]
)
为什么会这样?谢谢!
答案 0 :(得分:6)
String.prototype.match
函数返回所有匹配的数组,当' g'标志被添加到模式中。
您想使用RegExp.prototype.exec
函数来获取捕获组:
exec()保存它在RegExp对象中找到的匹配的最后一个索引,并在下次运行时从那里继续。因此,您需要循环遍历字符串,直到函数返回null以获取所有匹配项。
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" ]