除了特定的注释,我想捕获html注释,
<!-- end-readmore-item -->
此刻,我可以使用下面的正则表达式成功捕获所有HTML注释,
(?=<!--)([\s\S]*?)-->
要忽略指定的评论,我尝试了先行断后断言,但是在Regex的高级级别上是新手,我可能会错过一些东西。
到目前为止,我已经能够使用环顾四周设计以下正则表达式,
^((?!<!-- end-readmore-item -->).)*$
我希望它忽略end-readmore-item
注释,而只捕获其他注释,例如,
<!-- Testing-->
但是,它不仅可以完成工作,而且还捕获了我也希望忽略的常规HTML标签。
我一直在使用以下html代码作为测试用例,
<div class="collapsible-item-body" data-defaulttext="Further text">Further
text</div>
<!-- end-readmore-item --></div>
</div>
<!-- -->
it only should match with <!-- --> but it's selecting everything except <!--
end-readmore-item -->
the usage of this is gonna be to remove all the HTML comments except <!--
end-readmore-item -->
答案 0 :(得分:2)
您可以使用以下模式:
<!--(?!\s*?end-readmore-item\s*-->)[\s\S]*?-->
故障:
<!-- # Matches `<!--` literally.
(?! # Start of a negative Lookahead (not followed by).
\s* # Matches zero or more whitespace characters.
end-readmore-item # Matches literal string.
\s* # Matches zero or more whitespace characters.
--> # Matches `-->` literally.
) # End of the negative Lookahead.
[\s\S]*? # Matches any character zero or more time (lazy match),
# including whitespace and non-whitespace characters.
--> # Matches `-->` literally.
这基本上是指:
匹配不是{em> 的
<!--
,然后是[一个空格 * +end-readmore-item
+另一个空格 * +-->
],然后是 ,后跟任意数量的字符,然后紧接着是-->
。
* 一个可选空格重复零次或多次。
答案 1 :(得分:1)
您与否定的超前断言非常接近,只需按如下所示进行修改:
<!--((?!end-readmore-item).)*?-->
*?
非贪婪地匹配。
这将匹配所有注释,但注释正文中包含字符串end-readmore-item
的注释除外。