用于从 XHTML 文件中删除 CDATA 包装的正则表达式

发布于 2024-07-25 17:49:42 字数 760 浏览 8 评论 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> 
>

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

I'm trying to remove the CDATA wrapper in the following script (content has to be wrapped by CDATA to pass XHTML validation):

<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, "");

It removes most to the CDATA mark-up except for the start/end (<, >) tags:

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

Question: How should I modify the regex to additionally remove these leading and trailing <, > tags?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

香橙ぽ 2024-08-01 17:49:42

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

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

在您的情况下:

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

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

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

You could just replace the raw string and skip using regular expressions all-together:

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

In your case:

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

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

Regular expressions in JavaScript are slow. So on top of you getting your problem solved, you might see a slight speed-increase using my example.

岁月无声 2024-08-01 17:49:42

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

Isn't it enough to just add a < after the first slash in the first replace and a '>' after the last slash in the last replace? If your regex dialect takes these angle brackets as magic characters (few do) you can use \< and \> respectively, i.e., escape them with backslashes.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文