web-dev-qa-db-fra.com

JavaScript - Remplacer toutes les virgules d'une chaîne

J'ai une chaîne avec plusieurs virgules, et la méthode de remplacement de chaîne ne changera que la première:

var mystring = "this,is,a,test"
mystring.replace(",","newchar", -1)

Résultat: "thisnewcharis,a,test"

La documentation indique que la valeur par défaut remplace tout, et que "-1" indique également qu'il faut tout remplacer, mais que le processus échoue. Des pensées?

330
mike

Le troisième paramètre de la fonction String.prototype.replace() n'a jamais été défini comme standard; la plupart des navigateurs ne l'implémentent donc pas.

Le meilleur moyen consiste à utiliser expression régulière avec g ( global ) .

var myStr = 'this,is,a,test';
var newStr = myStr.replace(/,/g, '-');

console.log( newStr );  // "this-is-a-test"

Vous avez toujours des problèmes?

Il est important de noter que les expressions régulières utilisent caractères spéciaux à échapper . Par exemple, si vous devez échapper à un point (.), vous devez utiliser /\./ literal, comme dans la syntaxe regex, un point correspond à n'importe quel caractère (à l'exception des fins de ligne).

var myStr = 'this.is.a.test';
var newStr = myStr.replace(/\./g, '-');

console.log( newStr );  // "this-is-a-test"

Si vous devez passer une variable en tant que chaîne de remplacement, au lieu d'utiliser littéral regex, vous pouvez créer l'objet RegExp et passer une chaîne en tant que premier argument du constructeur . Les règles d'échappement de chaîne normales (précédant les caractères spéciaux avec \ lorsqu'elles sont incluses dans une chaîne) seront nécessaires.

var myStr = 'this.is.a.test';
var reStr = '\\.';
var newStr = myStr.replace(new RegExp(reStr, 'g'), '-');

console.log( newStr );  // "this-is-a-test"
708
VisioN

Juste pour le fun:

var mystring = "this,is,a,test"  
var newchar = '|'
mystring = mystring.split(',').join(newchar);
151
RobG
var mystring = "this,is,a,test"
mystring.replace(/,/g, "newchar");

Utilisez l'indicateur global (g)

Simple DEMO

43
gdoron