0

我正在尝试在 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 

我想知道为什么替换命令没有替换“〜,”的所有实例。正如您在第二个调试语句中看到的那样,仍然有一个......在我所说的“记录 2”中。我确定这是我错过的一些简单的事情......但我现在看不到它。

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

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

然后它就起作用了。但我认为我不应该这样做。

4

3 回答 3

1

String.replace默认情况下仅替换第一次出现。您需要更改server_rule_segements.replace("~,,", "~");server_rule_segements.replace(/~,,/g, "~");

于 2013-10-02T19:53:15.570 回答
1

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

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

会成功的。请注意,“g”标志表示全局替换。如果您不想使用正则表达式,请立即使用 split 后跟 join,

server_rule_segements = server_rule_segements.split("~,,").join("~");
于 2013-10-02T19:53:37.290 回答
0

改变这个:

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

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


Note i didn't run this code
于 2013-10-02T19:53:07.720 回答