網站搜尋

jquery - 為什麼在使用 replace 時,JavaScript 只會替換第一個出現的實例?


我有這個

 var date = $('#Date').val();

這會取得文字框中的值,看起來會像這樣

2009/12/31

現在我在它上面做這個

var id = 'c_' + date.replace("/", '');

結果是

c_1231/2009

它少了最後一個 '/',不過我不明白為什麼。

答案#1

你需要設置 g 標誌以進行全域替換:

date.replace(new RegExp("/", "g"), '')
// or
date.replace(/\//g, '')

否則只有第一次出現會被取代。

答案#2

不像 C#/.NET 類別庫(以及大多數其他合理的語言),當你將一個 String 作為要匹配的字串參數傳入 string.replace 方法時,它不會進行字串替換。它會將字串轉換為 RegExp 並執行正則表達式替換。如 Gumbo 所解釋,正則表達式替換需要 g 全域標誌,而該標誌預設並未啟用,才能一次替換所有匹配項。

如果你想要真正基於字串的替換——例如因為匹配字串是動態的,可能包含在正則表達式中具有特殊意義的字符——JavaScript 的慣用方法是:

var id= 'c_'+date.split('/').join('');

答案#3

你可以使用:

String.prototype.replaceAll = function(search, replace) {
if (replace === undefined) {
    return this.toString();
}
return this.split(search).join(replace);
}