Perché javascript sostituisce solo la prima istanza quando si utilizza la sostituzione?

ho questo

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

questo ottiene il valore nella casella di testo come apparirebbe questo

12/31/2009

Ora lo faccio

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

e il risultato è

c_1231 / 2009

Manca l’ultimo ‘/’ Non capisco perché però.

Devi impostare il flag g per sostituire globalmente:

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

Altrimenti verrà sostituita solo la prima occorrenza.

A differenza della libreria di classi C # /. NET (e della maggior parte degli altri linguaggi sensibili), quando si passa una String come argomento stringa per corrispondenza al metodo string.replace , non si sostituisce una stringa. Converte la stringa in un RegExp e esegue una sostituzione regex. Come spiega Gumbo, una sostituzione regex richiede il flag gobal, che non è attivo per impostazione predefinita, per sostituire tutte le partite in una volta.

Se vuoi una vera sostituzione basata su stringhe, ad esempio perché la stringa di confronto è dynamic e potrebbe contenere caratteri che hanno un significato speciale in regexen, l’idioma JavaScript è:

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

Puoi usare:

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