在下面的示例中,正则表达式必须匹配脚本标记之间的所有内容,包括脚本标记本身,但不能选择任何其他内容。
<unmodified html content> <script> * </script> <more unmodified html>
我到目前为止最接近的是:
(<script>)[^~]*(</script>)
测试标记:
<p> blah blah blah
</p> <span class="timestamp"><span class="hurrrp" id="faate_dd4dd">Nov 6, 2013</span>
<script>
if (FancyDate) FancyDate.add('derpaderp_1386447', 1385, 'MAIL_FORMAT');
</script>
</span>
<p> blah blah blah
</p> <span class="timestamp"><span class="hurrrp" id="faate_dd4dd">Nov 6, 2013</span>
<script>
if (FancyDate) FancyDate.add('derpaderp_1386447', 1385, 'MAIL_FORMAT');
</script>
</span>
答案 0 :(得分:2)
你只需要让这个明星变得懒惰:
(<script>)[^~]*?(</script>)
我敢肯定,如果你等了足够长的时间,有人会指出,“你不用正则表达式解析HTML!”但是,只要没有人将 放在你的JavaScript中,这应该没问题。
我也不太明白[^~]
的观点,但也许还有另一个我不知道的原因?
如果没有理由,你可以使用这个,这可以防止有人偷偷摸摸:
(<script>)[\s\S]*?(</script>)
如果你使用XRegExp,你可以打开(s)dot all 标志,然后执行此操作:
(<script>).*?(</script>)
我正在考虑使用否定的向前看(?!</script>)
但是结果不会被捕获,所以我放弃了。