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

RegEx Match everything between two patterns (javascript)

本文关键字:javascript 两种 模式 之间 RegEx      更新时间:2024-05-03

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

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

你只需要让星星变得懒惰:

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

REY Regex编辑器

我相信,如果你等待足够长的时间,会有人指出,"你不会用正则表达式解析HTML!"但只要没有人在你的JavaScript中放入,这应该没问题。

我也不太理解[^~]的意义,但也许还有另一个我不知道的原因?

如果没有原因,你可以使用这个,以防有人偷偷输入波浪号:

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

如果你使用XRegExp,你可以打开(s)dot-all标志,然后这样做:

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

我曾考虑使用否定的前瞻(?!</script>),但这不会在结果中得到体现,所以我放弃了它。