143 votes

Pourquoi le javascript ne remplace que la première instance lorsqu'il utilise replace ?

J'ai ceci

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

pour obtenir la valeur dans la zone de texte, ce qui ressemblerait à ceci

12/31/2009

Maintenant je fais ça dessus

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

et le résultat est

c_1231/2009

Il manque le dernier "/", mais je ne comprends pas pourquoi.

247voto

Gumbo Points 279147

Vous devez définir le g drapeau à remplacer globalement :

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

Sinon, seule la première occurrence sera remplacée.

75voto

bobince Points 270740

Contrairement à la bibliothèque de classes C#/.NET (et à la plupart des autres langages sensés), lorsque vous passez un fichier String en tant qu'argument string-to-match de l'option string.replace il ne fait pas de remplacement de chaîne. Elle convertit la chaîne en un RegExp et effectue une substitution regex. Comme l'explique Gumbo, une substitution regex nécessite le paramètre g lobal, qui n'est pas activé par défaut, pour remplacer toutes les correspondances en une seule fois.

Si vous voulez un véritable remplacement basé sur une chaîne de caractères - par exemple parce que la chaîne de correspondance est dynamique et peut contenir des caractères qui ont une signification spéciale dans le regexen - l'idiome JavaScript pour cela est le suivant :

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X