Javascript替换方法不起作用。

时间:2014-03-14 05:05:55

标签: javascript jquery

我将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(), "");

但字符串没有改变是什么问题?

3 个答案:

答案 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(), "");