最后一个字符串与正则表达式权限不匹配

时间:2011-05-01 17:56:19

标签: javascript regex regex-greedy

我需要som正则表达式的帮助。我有这个我想要匹配的代码。

var i1 = "<ul> {{#items}}<li>{{.}}</li>{{/items}} </ul>";
var i2 = "<ul> {{#items}}<li>{{.}}</li> <li><ul> {{#items}}<li>{{.}}</li>{{/items}} </ul></li>{{/items}} </ul>";
var i3 = "<ul> {{#items}}<li>{{.}}</li>{{/items}} </ul> <ul> {{#items}}<li>{{.}}</li>{{/items}} </ul>";


var reg = /{{(?:(?:#|!#)([\s\w\.-]+))}}+(.+(?:{{\/.+}}))/

i1 => ["{{#items}}<li>{{.}}</li>{{/items}}", "items", "<li>{{.}}</li>"]
i2 => ["{{#items}}<li>{{.}}</li> <li><ul> {{#items}}<li>{{.}}</li>{{/items}} </ul></li>{{/items}}", "items", "<li>{{.}}</li> <li><ul> {{#items}}<li>{{.}}</li>{{/items}} </ul></li>"]
i3 => ["{{#items}}<li>{{.}}</li>{{/items}} </ul> <ul> {{#items}}<li>{{.}}</li>{{/items}}", "items", "<li>{{.}}</li>{{/items}} </ul> <ul> {{#items}}<li>{{.}}</li>"]

最后一个与我想要的不匹配。我只是希望它与第一个ul#项匹配,并在第一个{{/ items}}到来时停止。该注册表的前两个没有html标签。

我需要一些帮助来弄清楚如何做最后一个。

谢谢

1 个答案:

答案 0 :(得分:2)

您的模式是贪婪的,这意味着它将匹配最大可能的字符串。使用.*?.+?代替.*.+。请查看here以获取有关“贪婪”和“懒惰”运算符之间差异的更详细说明。