2013-10-02 89 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, "~");