javascript .replace()方法无法正常工作

时间:2013-10-02 19:50:33

标签: javascript

我正在尝试在javascript中使用replace语句,这样最终,我可以用当前在字符串中传递的一些数据创建一个数组。

我有以下javascript:

        console.log('data from server:' + server_rule_segements);
        //remove trailing ~
        server_rule_segements = server_rule_segements.substring(0,server_rule_segements.length-2); // stripping off trailing ~,
        console.log("1 - " + server_rule_segements); 
        server_rule_segements = server_rule_segements.replace("~,,", "~");
        console.log("2 - " + server_rule_segements); 

以下是控制台中的结果:

data from server:Home Number,1234,1,no~,,Work Number,12342342,1,no~,,Work Number,12344412341234,1,no~, 
1 - Home Number,1234,1,no~,,Work Number,12342342,1,no~,,Work Number,12344412341234,1,no 
2 - Home Number,1234,1,no~Work Number,12342342,1,no~,,Work Number,12344412341234,1,no 

我想知道为什么replace命令没有替换“〜,,”的所有实例。 正如你在第二个调试语句中看到的,那里还有一个...我称之为“记录2”。我确信这是一件很简单的事,我错过了......但我现在看不到它。

在测试时,我更改了代码,以便我调用replace方法两次,如下所示:

server_rule_segements = server_rule_segements.replace("~,,", "~");
server_rule_segements = server_rule_segements.replace("~,,", "~");

然后它的工作原理。 但我认为我不应该这样做。

3 个答案:

答案 0 :(得分:1)

默认情况下,

String.replace仅替换第一个匹配项。 您需要将server_rule_segements.replace("~,,", "~");更改为server_rule_segements.replace(/~,,/g, "~");

答案 1 :(得分:1)

replace方法只替换第一个实例,如果要使用正则表达式替换所有实例。这很容易,因为replace方法也接受正则表达式:

server_rule_segements = server_rule_segements.replace(/~,,/g, "~");

会做到这一点。请注意,“g”标志表示全局替换。如果您不想使用正则表达式,请立即使用拆分,然后使用连接

server_rule_segements = server_rule_segements.split("~,,").join("~");

答案 2 :(得分:0)

改变这个:

server_rule_segements.replace("~,,", "~")

var re = new RegExp("~,,", 'g');
server_rule_segements.replace(re,"~")


Note i didn't run this code