Por que o javascript substitui apenas a primeira instância ao usar replace?

eu tenho isto

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

isso obter o valor na checkbox de texto que ficaria assim

31/12/2009

Agora eu faço isso

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

e o resultado é

c_1231 / 2009

Perde o último ‘/’ Eu não entendo por que embora.

Você precisa definir o sinalizador g para replace globalmente:

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

Caso contrário, apenas a primeira ocorrência será substituída.

Ao contrário da biblioteca de classs C # / .NET (e da maioria das outras linguagens sensíveis), quando você passa um String em um argumento string-to-match para o método string.replace , ele não substitui uma string. Converte a string em um RegExp e faz uma substituição de regex. Como Gumbo explica, uma substituição regex requer que o sinalizador g ‍lobal, que não está ativado por padrão, substitua todos os jogos de uma só vez.

Se você quiser uma substituição real baseada em string – por exemplo, porque a string de correspondência é dinâmica e pode conter caracteres que têm um significado especial em regexen – o idioma JavaScript para isso é:

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

Você pode usar:

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