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