Страницы

Поиск по вопросам

четверг, 13 февраля 2020 г.

RegExp не учитывает переносы строк

#javascript #регулярные_выражения


Я написал регулярку new RegExp('(<%--)(.*)(--%>)','gim'), которая должна находить
все что заключено в последовательность символов <%-- --%>. В пределах одной строки
это работает нормально, но если между последовательностями символов <%-- --%> будет
перенос строки - то все сломается. Ловить перенос строки я решил такой регуляркой:
(<%--)([\s\S]*)(--%>), но она не работает правильно. 

Подскажите, как правильно написать регулярку которая будет учитывать переносы строк?
    


Ответы

Ответ 1



https://regex101.com/r/cZ6oI8/3 var re = /(<%--)([\s\S]*?)(--%>)/g; По умолчанию квантификатор * «жадный» и старается захватить как можно больше символов. Что бы ограничить его жадность надо добавить к нему флаг ? (не путать с квантификатором ?).

Ответ 2



Рекомендую пробовать так (для тех кто столкнётся): new RegExp('(<%--)((?:.|\n)*?)(--%>)','g') лично у меня не работал поиск с помощью [\s\S]*? (дебажил в chrome console), несмотря на то что во всех справках он указывается как самый верный, а также на ресурсах где обычно тестят регулярные выражения - такие как regex101.com, jsfiddle.net - всё работает. в идеале должны работать оба способа (по логике вещей): ([\s\S]*?) - поскольку \s - любой пробельный символ (включая табы и переводы), а \S - любой символ кроме пробельного. ((?:.|\n)*?) - поскольку . - любой символ кроме переноса строки, \n - сам перенос. читается сложнее (используются "незахватывающие скобки"), но надёжнее подробнее о RegExp

Комментариев нет:

Отправить комментарий