2015-11-14 3 views
2

Мне нужно создать регулярное выражение, которое будет соответствовать любому (включая разрывы строк) между 2 html конкретными тегами комментариев. Вот пример для некоторой HTML:javascript regex, чтобы соответствовать всем между 2 html комментариями

<!-- build-remove-start --> 
<!-- bower:js --> 
<script src="../bower_components/jquery/dist/jquery.js"></script> 
<!-- endbower --> 
<!-- build-remove-end --> 

<!-- inject:vendor:js --> 
<!-- endinject --> 

Я хотел бы, чтобы соответствовать все, что между <!-- build-remove-start --> и <!-- build-remove-end --> не включая тег комментариев (я имею в виду, чтобы не удалить комментарии тегов, только то, что внутри).
Я пробовал:
<!-- build-remove-start -->[\s\S]<!-- build-remove-end -->
Но это не работает. Вот ссылка, чтобы проверить регулярное выражение:
https://regex101.com/r/rV0qG2/2

+1

Проверьте [это демо] (https://regex101.com/r/rV0qG2/3). –

+0

Могу ли я предложить использовать DOM, который может перебирать узлы комментариев? – Eevee

+0

@Eevee, для строительных целей – vlio20

ответ

3

Вам нужно добавить * после [\s\S].

/<!-- build-remove-start -->([\s\S]*?)<!-- build-remove-end -->/gmi 

Также рекомендую добавлять ? после * так это делает его ленивым. Таким образом, вы можете иметь приведенный ниже пример, например, строка this won't be removed будет сопоставлена.

<!-- build-remove-start --> 
//remove this 
<!-- build-remove-end --> 

This won't be removed 

<!-- build-remove-start --> 
//Remove this 
<!-- build-remove-end --> 
+0

не включает в себя тег комментариев? – vlio20

+0

Почему группа захвата? –

+0

Вам нужно только заменить то, что находится внутри группы захвата, а не весь матч. –

Смежные вопросы