匹配未注释掉的html标签

时间:2013-10-13 22:10:58

标签: java regex

我希望匹配未注释掉的脚本标记。为此我试图使用这个正则表达式:

(?is)((?<!<!--(?!-->))<script[^>]*>)

逻辑是要求<script[^>]*> <!--之前没有-->,而(?!-->)后面没有<script[^>]*>,但显然-->并未停留在< {1}}然后一直到<script...。如何告诉它在{{1}}的{​​{1}}停止?

1 个答案:

答案 0 :(得分:0)

为此,您可以在搜索脚本标签之前和之后搜索所有评论的内容,并将此子模式放在捕获组中:

<!--(?>[^-]+|-(?!->))*-->|(?i)(<script[^>]*>(?>[^<]+|<(?!/script>))*</script>)

然后结果出现在捕获组中。

如果您想使用replaceFirst()方法,可以使用:

<强>图案

(?i)((?><!--(?>[^-]+|-(?!->))*-->|[^<]+|<(?!script))*)(<script[^>]*>(?>[^<]+|<(?!/script>))*</script>)

<强>替换

$1 ### what you want ###

(或在回调函数中使用捕获组2)