加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

替换xml中的cdata标记

发布时间:2020-12-16 23:14:09 所属栏目:百科 来源:网络整理
导读:我有一个字符串,里面可能有多个cdata标签: ![CDATA[A Survey of Applications of Identity-Based Cryptography in Mobile Ad-Hoc Networks]] 我正在使用javascript / jquery,我需要删除多个cdata标签(用“”替换它们). 我怎么能用正则表达式写这个? 解决方
我有一个字符串,里面可能有多个cdata标签:

<![CDATA[A Survey of Applications of Identity-Based Cryptography in Mobile Ad-Hoc Networks]]>

我正在使用javascript / jquery,我需要删除多个cdata标签(用“”替换它们).

我怎么能用正则表达式写这个?

解决方法

@Jim Garrison在上面的评论中是正确的:没有办法用正则表达式强健地解析XML / HTML.该语言过于复杂,无法用正则表达式表示.

但是,这并不意味着您不能编写一个涵盖大多数合理案例的正则表达式,这可能足以满足您的需求.例如,以下JavaScript正则表达式将主要执行您想要的操作:

input.replace( /<![CDATA[.*?]]>/g,'' );

这个正则表达式中注意的两件事:CDATA体内的通配符(.*?)是否与?修改.没有它,会发生以下不好的事情:

'before <![CDATA[blah]]> some stuff between <![CDATA[another cdata]]> after'
    .replace( /<![CDATA[.*]]>/g,'' );
// returns "before  after" when we probably 
// wanted "before  some stuff between  after"

另一件事是我们使用g标志来表示应该替换所有匹配.否则只会替换第一场比赛.

阅读评论,看起来您可能只想删除CDATA标签,同时保持其内容不变.正如@Jim Garrison上面指出的那样,这是一个坏主意,因为你很容易留下无效的HTML;这就是CDATA的重点.但如果您确实想这样做,请按以下步骤操作:

'outside <![CDATA[(cdata1)]]> inside <![CDATA[(cdata2)]]> after'
    .replace( /<![CDATA[(.*?)]]>/g,'$1' );
// yields "outside (cdata1) inside (cdata2) after"

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读