我有以下字符串:
<h2><!--DEL-->This is the title<!-- /DEL --><!-- ADD--><% title %><!--/ADD--></h2>
<!--ADD-->
<strong>some emphasised text</strong>
<!--/ADD-->
<ul>
<!--ADD--><% for each item in list %> <!--/ADD--> <li><!--DEL-->This is the first item in the list<!--/DEL--><!--ADD--><% item %><!--/ADD--></li><!--ADD--><% end for %><!-- /ADD -->
<!--DEL--><li>This is the second item in the list</li><!--/DEL -->
<!--DEL--><li>This is the <strong>third</strong> item in the list</li><!-- /DEL -->
</ul>
通过正则表达式,我希望它产生以下内容:
<h2><% title %></h2>
<strong>some emphasised text</strong>
<ul>
<% for each item in list %><li><% item %></li><% end for %>
</ul>
我正在使用的正则表达式:
template = template.replace(/<\!--\s*?DEL\s*?-->(.*)<\!--\s*?\/DEL\s*?-->/gm, "");
template = template.replace(/<\!--\s*?ADD\s*?-->(.*)<\!--\s*?\/ADD\s*?-->/gm, "$1");
但目前正在制作:
<h2><% title %></h2>
<ul>
<% for each item in list %><!-- /ADD --><li><!-- ADD --><% item %><!-- /ADD --></li><!-- ADD --><% end for %>
</ul>
问题1:当同一行上有多个匹配时,它似乎不喜欢它(似乎将它们视为一个大匹配)。
问题2:如何让它跨多线匹配?我知道。字符不允许换行符,但我使用的是/ m修饰符(似乎不起作用)。
任何想法都将不胜感激!
感谢。
答案 0 :(得分:1)
问题1
你只需要让你的通配符懒惰:
template = template.replace(/<\!--\s*?DEL\s*?-->(.*?)<\!--\s*?\/DEL\s*?-->/gm, "");
template = template.replace(/<\!--\s*?ADD\s*?-->(.*?)<\!--\s*?\/ADD\s*?-->/gm, "$1");
答案 1 :(得分:1)
问题2. js中没有DOT_ALL修改器。但是使用可以使用构造[\ s \ S]而不是实际匹配所有符号的点。 所以最后你的regexp将是
/<\!--\s*?DEL\s*?-->([\s\S]*?)<\!--\s*?\/DEL\s*?-->/gm