Последняя строка не соответствует правильному регулярному выражению

#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:

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