#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
Комментариев нет:
Отправить комментарий