我想匹配未注释掉的脚本标签。为此,我试图使用这个正则表达式:
(?is)((?<!<!--(?!-->))<script[^>]*>)
逻辑是要求它<script[^>]*>
前面没有<!--
,反过来,后面也没有-->
,但显然(?!-->)
不会停在它之后,而是<script[^>]*>
一直到-->
它之后。我如何告诉它停在<
in <script...
?
为此,您可以搜索之前和之后的所有评论内容,作为替代,搜索脚本标签并将此子模式放入捕获组中:
<!--(?>[^-]+|-(?!->))*-->|(?i)(<script[^>]*>(?>[^<]+|<(?!/script>))*</script>)
然后结果在捕获组中。
如果要使用该replaceFirst()
方法,可以使用:
图案
(?i)((?><!--(?>[^-]+|-(?!->))*-->|[^<]+|<(?!script))*)(<script[^>]*>(?>[^<]+|<(?!/script>))*</script>)
替换
$1 ### what you want ###
(或在回调函数中使用捕获组 2)