在同一行中多次匹配字符串模式

时间:2015-01-24 14:56:52

标签: javascript regex

我想在字符串中找到特定的模式。

模式:(\{\$.+\$\})
示例matche:{$ test $}

我遇到的问题是文本在同一行上有2个匹配项。它返回一个匹配。示例:this is a {$ test $} content {$ another test $}

返回1匹配:{$ test $} content {$ another test $}

它应该返回2个匹配: {$ test $}{$ another test $}

注意:我正在使用Javascript

2 个答案:

答案 0 :(得分:11)

问题是当您使用(\{\$.+\$\})时,正则表达式.+本质上是贪婪的,这就是为什么它与{$}$之间的最长匹配匹配。

要解决问题,请让你的正则表达式非贪婪:

(\{\$.+?\$\})

甚至更好地使用否定正则表达式:

(\{\$[^$]+\$\})

RegEx Demo

答案 1 :(得分:0)

利用global match flag。 同样使用否定前瞻将确保您没有错过任何匹配或没有击中任何错误匹配。

var s = "this is a {$ test $} content {$ another test $}";
var reg = /\{\$.*?(?!\{\$.*\$\}).*?\$\}/g;
console.log(s.match(reg));