我将XML存储在JavaScript变量
中<data>
<event>
<eid><![CDATA[152]]]]><![CDATA[></eid>
<start_date><![CDATA[2014-03-01 00:00:00]]]]><![CDATA[></start_date>
<end_date><![CDATA[2014-03-01 00:35:00]]]]><![CDATA[></end_date>
<text><![CDATA[New event]]]]><![CDATA[></text>
<rec_type><![CDATA[]]]]><![CDATA[></rec_type>
<event_pid><![CDATA[0]]]]><![CDATA[></event_pid>
<event_length><![CDATA[0]]]]><![CDATA[></event_length>
<event_type><![CDATA[0]]]]><![CDATA[></event_type>
<event_color><![CDATA[#664d0c]]]]><![CDATA[></event_color>
<userid><![CDATA[1]]]]><![CDATA[></userid>
<mediaid><![CDATA[65]]]]><![CDATA[></mediaid>
</event>
</data>
现在我想替换所有这样的实例
]]><![CDATA[
来自变量
我试过了吗?
{
var exp = "/]]><![CDATA[/gi";
alert(exp);
return exp;
}
xmldata = xmldata.replace(getExpReg(), "");
但字符串没有改变是什么问题?
答案 0 :(得分:1)
使用像
这样的简单正则表达式xmldata = xmldata.replace(/\]\]><!\[CDATA\[/gi, "");
在你的情况下,你从getExpReg
方法返回一个字符串文字,因此replace方法搜索字符串的完全匹配并替换它的第一次出现。
如果要将字符串文字用作正则表达式,则需要使用RegExp构造函数
答案 1 :(得分:1)
.replace
接受字符串(完全匹配)或正则表达式对象(正则表达式匹配)。因此,如果要使用变量(或函数返回值)作为arg,则必须执行后者。
注意:你的第二个问题的原因是你没有逃避方括号。您必须转义对正则表达式引擎具有特殊含义的字符。方括号用于字符类,例如[0-9]
匹配数字0到9。
function getExpReg()
{
var exp = new RegExp("\\]\\]><!\\[CDATA\\[","gi");
alert(exp);
return exp;
}
xmldata = xmldata.replace(getExpReg(), "");
答案 2 :(得分:0)
您尚未转义特殊字符([
,/
)。应该是:
function getExpReg(){
var exp = /\/\]\]><!\[CDATA\[/gi; // escape using \
alert(exp);
return exp;
}
xmldata = xmldata.replace(getExpReg(), "");