Последняя строка не соответствует регулярному выражению справа - PullRequest
1 голос
/ 01 мая 2011

Мне нужна помощь Сом Регул. У меня есть этот код, который я хочу соответствовать.

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 Ответ

2 голосов
/ 01 мая 2011

Ваш шаблон жадный, то есть он будет соответствовать максимально возможной строке.Используйте .*? и .+? вместо .* и .+.Проверьте здесь для более подробного объяснения различия между «жадными» и «ленивыми» операторами.

...