2014-03-14 61 views
0

我存储在XML JavaScript变量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

你为什么要替换它 –

+0

的Cuz功能到即时通讯传递这个XML不能读取额外CDATA领域 –

+0

因为'.replace'只接受一个静态字符串(精确匹配)或正则表达式*对象*。 'var exp = new RegExp(“”\] \]><!\ [CDATA \ [“,”gi“);' –

回答

1

.replace接受一个字符串(精确匹配)或正则表达式对象(正则表达式匹配)。所以,如果你想使用一个变量(或函数返回值)作为参数,你必须做后者。

注意:你的第二个问题的原因是你没有转义方括号。您必须转义对正则表达式引擎具有特殊含义的字符。方括号用于字符类别,例如[0-9]匹配的数字0直通9

function getExpReg() 
{ 
    var exp = new RegExp("\\]\\]><!\\[CDATA\\[","gi"); 
    alert(exp); 
    return exp; 
} 

xmldata = xmldata.replace(getExpReg(), ""); 
1

使用一个简单的regex像

xmldata = xmldata.replace(/\]\]><!\[CDATA\[/gi, ""); 

在你的情况你是返回一个字符串从getExpReg法文字,所以更换方法搜索完全匹配的字符串和替换它的第一次出现。

如果你想使用字符串字面作为一个正则表达式,那么你需要使用正则表达式构造

+0

我认为OP想'i'gnorecase。在他的第二个代码块中放入了'i'标志 –

+2

你应该解释一下OP写的和你有什么区别,那就是你使用正则表达式(和特殊字符转义),而不是仅仅传递在一个看起来像正则表达式的字符串中 –

0

你也没能逃脱特殊字符([/)。应该是:

function getExpReg(){ 
    var exp = /\/\]\]><!\[CDATA\[/gi; // escape using \ 
    alert(exp); 
    return exp; 
} 

xmldata = xmldata.replace(getExpReg(), "");