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);
}
