我有一个字符串,里面可能有多个cdata标签:
<![CDATA[A Survey of Applications of Identity-Based Cryptography in Mobile Ad-Hoc Networks]]>
我正在使用javascript / jquery,我需要删除多个cdata标签(用“”替换它们)。
我怎么能用正则表达式写这个?
答案 0 :(得分:6)
然而,这并不意味着你不能编写一个涵盖最合理的案例的正则表达式,这可能足以满足你的需求。例如,以下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"