【问题标题】:Regex to remove CDATA wrapper from an XHTML file正则表达式从 XHTML 文件中删除 CDATA 包装器
【发布时间】:2023-04-03 04:11:01
【问题描述】:

我正在尝试删除以下脚本中的 CDATA 包装器(内容必须由 CDATA 包装以通过 XHTML 验证):

<script id="tplTest" type="text/html">

//<![CDATA[ 
<p id="msg">Hello</p>
<p>Another test: <#= ddd.ArtID #></p> 
//]]>

</script> 

JavaScript:

var strTmp = document.getElementById("tplTest").innerHTML;
var strNew = strTmp.replace(/[\/(\/!\[)\]CDATA]/g, "").replace(/[(\/\/\]\])]/g, "");

除了开始/结束(&lt;&gt;)标签之外,它删除了 CDATA 标记的大部分内容:

< 
<p id="msg">Hello<p>
<p>nother test: <#= ddd.rtI #><p> 
>

问题:我应该如何修改正则表达式以另外删除这些前导和尾随 &lt;&gt; 标记?

【问题讨论】:

    标签: javascript regex cdata


    【解决方案1】:

    您可以直接替换原始字符串并一起跳过使用正则表达式:

    "FOO BAR".replace("FOO", ""); // replace "FOO" with "" (nothing)
    

    在你的情况下:

    var stringToSanitize = "//<![CDATA[ xxx //]]>";
    
    var sanitizedString = stringToSanitize
                          .replace("//<![CDATA[", "")
                          .replace("//]]>", "");
    

    JavaScript 中的正则表达式很慢。因此,在解决问题的基础上,使用我的示例,您可能会看到速度略有提高。

    【讨论】:

      【解决方案2】:

      在第一个replace 的第一个斜杠之后添加一个&lt; 并在最后一个replace 的最后一个斜杠之后添加一个'>' 还不够吗?如果您的正则表达式方言将这些尖括号作为魔术字符(很少这样做),您可以分别使用 \&lt;\&gt;,即用反斜杠转义它们。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-11-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-08-24
        • 2019-08-20
        相关资源
        最近更新 更多