Я думаю, что вы думаете, чтобы использовать шаблон, похожий на этот
Regex
(?<={% for[^%]*%})((?:.|\n)*)(?={% endfor %})
Объяснение
(?<={% for[^%]*%})
: использовать с просмотром назад на поиск шаблона {% for[^%]*%}
(?={% endfor %})
: использовать предпросмотр для поиска текста {% endfor %}
((?:.|\n)*)
: сообщение между для цикла, который захватывается переменной $1
Но в случае, если ваш язык не поддерживает lookaround, вы просто использовать этот
Regex
({% for[^%]*%})((?:.|\n)*)({% endfor %})
Объяснение
({% for[^%]*%})
: захват шаблон {% for[^%]*%}
переменной $1
({% endfor %})
: шаблон захвата {% endfor %}
с переменной $3
((?:.|\n)*)
: сообщение между для цикла, который захватывается $2
Просто измените мой regex
в соответствии с ограничением на вашем языке, тогда вы это сделаете.
Редактировать
Как я ищу, я думаю Javascript
не поддерживают lookaround и другую вещь {
, }
должны быть побег \
. Я уже тестировал регулярное выражение, используя некоторый онлайн-тестер регулярных выражений для Javascript, и я получаю это.
(\{% for[^%]*%\})((?:.|\n)*)(\{% endfor %\})
, чтобы получить текст, который вы хотите, вы просто использовать переменную $2
.
Дополнительная
В случае, если вы хотите, чтобы захватить сообщение внутри вложенного цикла, например,
Пример Сообщение
{% for product in products.pos01 %}
...
{% for product in products.pos02 %}
"messages"
{% endfor %}
...
{% endfor %}
Для захвата "messages"
внутри этого вложенного цикла вам просто нужно изменить свое предыдущее регулярное выражение
(\{% for[^%]*%\}(?:.|\n)*\{% for[^%]*%\})((?:.|\n)*)(\{% endfor %\}(?:.|\n)*\{% endfor %\})
Объяснение
(\{% for[^%]*%\}(?:.|\n)*\{% for[^%]*%\})
: означает «старт for for loop "follo Крыло от «любых символов, включая символ новой строки» и следующим путем «начала цикл»
((?:.|\n)*)
: наша цель сообщение
(\{% endfor %\}(?:.|\n)*\{% endfor %\})
: означает «конец для цикла» следуя за «каких-либо знаков, включая символ новой строки» и следующим путем «end for for loop»
Обратите внимание, что я просто перестроил свое предыдущее регулярное выражение, чтобы выполнить эту немного более сложную работу.
Возможно, [этот] (https://regex101.com/r/oV7rL2/1): '\ {% \ s * для [\ s \ S] *?%} ([\ S \ S ] *?) \ {% \ s * ENDFOR \ s *%} '? –