2013-10-02 90 views
0

我想在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 

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

正如我测试,我改变了代码,这样,我称之为替代方法两次,像这样:

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

,然后它的作品。 但我认为我不应该这样做。

+0

可能是〜或逗号是特殊字符。尝试'替换(“\〜\,\,”,“\〜”),看看是否有效。 – 2013-10-02 19:51:31

+0

如果第一个参数是带有'g'修饰符的正则表达式,'replace'只会替换所有出现的事件。如果它是一个字符串,它只是一个替代品。 – Barmar

回答

1

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

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

会做伎俩。注意“g”标志表示全局替换。如果您不想使用正则表达式,请立即使用split然后加入,

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

Kernal,那太好了。有用。 – dot

+0

点没问题。 –

0

改变这一点:

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

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


Note i didn't run this code 
1

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