Могу ли я решить следующее с помощью одного регулярного выражения? Я знаю, что это можно сделать с двумя отдельными регулярными выражениями, но мне любопытно, можно ли это сделать только с одним?
Найти все экземпляры слов (переменных), которые начинаются с $_, но только если они попадают где-то между разделителями интерполирования шаблона (‹%= и %›)
Так со следующим текстом:
<div>
<% if ( $_createDiv) { %>
<div>Div created!</div>
<% } %>
<h2>
<span><%= $_var1 %></span>
</h2>
<div><%= markdown.toHTML($_var2 ) %></div>
<div><%= $_var3 +' more text ' + $_var4 %></div>
</div>
Ожидаемые результаты должны быть только следующими: $_var1, $_var2, $_var3, $_var4 примечание: $_createDiv не должен возвращаться, так как он находится в разделителе оценки (‹% вместо ‹%=)
https://regex101.com/r/dAesYE/1
Можно ли сделать это с помощью одного регулярного выражения или мне нужно использовать два? Я мог бы использовать два, запустив /(?<=<%=).*(?=%>)/gm
, чтобы найти весь текст между разделителями, затем прокрутить результаты и запустить /\B\$_\w+/gm
, чтобы получить переменные. Мне просто любопытно, можно ли использовать одно регулярное выражение.
Для контекста я пытаюсь найти их, чтобы запустить замену, чтобы окружить имя переменной функцией, например:
myFunc($_var1)