#javascript #regex #regex-greedy
#javascript #регулярное выражение #регулярное выражение -жадное
Вопрос:
Мне нужна помощь по регулярному выражению. У меня есть этот код, которому я хочу соответствовать.
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 = /{{(?:(?:#|!#)([sw.-] ))}} (. (?:{{/. }}))/
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}}. Reg работает без html-тегов для первых двух.
Мне нужна помощь, чтобы выяснить, как выполнить последнее.
Спасибо
Ответ №1:
Ваш шаблон жадный, то есть он будет соответствовать максимально возможной строке. Используйте .*?
и . ?
вместо .*
и .
. Проверьте здесь для более подробного объяснения разницы между «жадными» и «ленивыми» операторами.