2014-03-14 60 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(), "");