正则表达式从XHTML文件中删除CDATA包装器

时间:2009-06-26 15:02:30

标签: javascript regex cdata

我正在尝试删除以下脚本中的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, "");

除了开头/结尾(<>)标记外,它删除了大部分CDATA加价:

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

问题:如何修改正则表达式以额外删除这些前导和尾随<>标记?

2 个答案:

答案 0 :(得分:5)

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

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

在你的情况下:

var stringToSanitize = "//<![CDATA[ xxx //]]>";

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

JavaScript中的正则表达式很慢。因此,除了解决问题之外,您可能会看到使用我的示例稍微提高速度。

答案 1 :(得分:0)

仅在第一个<中的第一个斜杠和'&gt;'之后添加replace是不够的在最后一次replace的最后一次斜线之后?如果你的正则表达式方言将这些尖括号视为魔术字符(少数几个),你可以分别使用\<\>,即用反斜杠转义它们。