0

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

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

4

2 回答 2

5

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

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

在你的情况下:

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

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

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

于 2009-06-26T15:07:40.533 回答
0

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

于 2009-06-26T15:09:07.740 回答