RegEx匹配两种模式之间的所有内容(javascript)

时间:2013-12-07 22:02:51

标签: javascript regex

在下面的示例中,正则表达式必须匹配脚本标记之间的所有内容,包括脚本标记本身,但不能选择任何其他内容。

<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>

1 个答案:

答案 0 :(得分:2)

你只需要让这个明星变得懒惰:

(<script>)[^~]*?(</script>)

REY Regex Editor

我敢肯定,如果你等了足够长的时间,有人会指出,“你不用正则表达式解析HTML!”但是,只要没有人将 放在你的JavaScript中,这应该没问题。

我也不太明白[^~]的观点,但也许还有另一个我不知道的原因?

如果没有理由,你可以使用这个,这可以防止有人偷偷摸摸:

(<script>)[\s\S]*?(</script>)

REY

如果你使用XRegExp,你可以打开(s)dot all 标志,然后执行此操作:

(<script>).*?(</script>)

REY

我正在考虑使用否定的向前看(?!</script>)但是结果不会被捕获,所以我放弃了。