0

我遇到了一个 javascript 正则表达式的问题,它必须注释掉脚本标签内的所有标签。但它不能注释掉 id 为“ignorescript”的特殊第一个脚本标签。

这是正则表达式的示例字符串:

<script id="ignorescript">
    var test = '<script>test<\/script>;
    var xxxx = 'x';
</script>

ignorescipt 中的脚本标签有额外的反斜杠,因为它是 JSON 编码的(来自 PHP)。

这是我必须得到的最终结果:

<script id="ignorescript">
    var test = '<!ignore-- <script>test<\/script> ignore-->;
    var xxxx = 'x';
</script>

以下示例有效:

content = content.replace(/(<script>.*<\\\/script>)/g,
    "<!--ignore $1 ignore-->");

但我需要检查它是否不包含关键字“ignorescript”。如果该关键字出现,那么我不想替换任何东西。否则将忽略注释添加到整个脚本标签到目前为止,我已经做到了这一点:

content = content.replace(/(<script.((?!ignorescript).)*<\/script>)/g,
    "<!--ignore $1 ignore-->");

它有点工作,但不是它应该的方式。我在结束标记中还有一个反斜杠。所以我把它改成:

content = content.replace(/(<script.((?!ignorescript).)*<\\\/script>)/g,
    "<!--ignore $1 ignore-->");

不是它根本找不到任何东西。

4

1 回答 1

0

终于搞定了

这是工作正则表达式:

/(<script(?!\sid="ignorescript").*?<\\\/script>)/g
于 2013-10-10T21:00:42.193 回答