96 votes

En Javascript, comment puis-je effectuer un remplacement global sur une chaîne de caractères dont la variable se trouve dans '/' et '/g' ?

Je veux effectuer un remplacement global d'une chaîne de caractères en utilisant String.replace en Javascript.

Dans la documentation, je lis que je peux faire cela avec /g, c'est-à-dire par exemple ;

var mystring = mystring.replace(/test/g, mystring);

et cela remplacera toutes les occurrences dans mystring. Pas de guillemets pour l'expression.

Mais si j'ai une variable à trouver, comment puis-je le faire sans guillemets ?

J'ai essayé quelque chose comme ça :

var stringToFind = "test";

//premier essai

mystring = mystring.replace('/' + stringToFind + '/g', mystring);

// deuxième essai, pas beaucoup de sens du tout

mystring = mystring.replace(/stringToFind/g, mystring);

mais ils ne fonctionnent pas. Avez-vous des idées ?

230voto

Paolo Bergantino Points 199336
var mystring = "hello world test world";
var find = "world";
var regex = new RegExp(find, "g");
alert(mystring.replace(regex, "yay")); // alerts "hello yay test yay"

Au cas où vous en auriez besoin dans une fonction

  replaceGlobally(original, searchTxt, replaceTxt) {
    const regex = new RegExp(searchTxt, 'g');
    return original.replace(regex, replaceTxt) ;
  }

104voto

bobince Points 270740

Pour les regex, new RegExp(stringtofind, 'g'); . MAIS, si 'find' contient des caractères qui sont spéciaux en regex, ils auront leur signification regex. Ainsi, si vous essayez de remplacer le '.' de 'abc.def' par 'x', vous obtiendrez 'xxxxxxx' - oups.

Si tout ce que vous voulez est un simple remplacement de chaîne de caractères, il n'y a pas besoin d'expressions régulières ! Voici l'idiome de remplacement simple de chaîne de caractères :

mystring= mystring.split(stringtofind).join(replacementstring);

44voto

Lex Podgorny Points 881

Les expressions régulières sont beaucoup plus lentes que la recherche par chaîne de caractères. Ainsi, créer une expression régulière avec une chaîne de recherche échappée n'est pas une méthode optimale. Même le fait de boucler à travers la chaîne de caractères serait plus rapide, mais je suggère d'utiliser les méthodes pré-compilées intégrées.

Voici une méthode rapide et propre pour effectuer un remplacement global rapide de chaînes de caractères :

sMyString.split(sSearch).join(sReplace);

Et c'est tout.

16voto

unigogo Points 359
String.prototype.replaceAll = function (replaceThis, withThis) {
   var re = new RegExp(RegExp.quote(replaceThis),"g"); 
   return this.replace(re, withThis);
};

RegExp.quote = function(str) {
     return str.replace(/([.?*+^$[\]\\(){}-])/g, "\\$1");
};

var aa = "qwerr.erer".replaceAll(".","A");
alert(aa);

poste silencieux

13voto

dSd Points 129

Vous pouvez utiliser la solution suivante pour effectuer un remplacement global sur une chaîne de caractères contenant une variable à l'intérieur de '/' et '/g' :

myString.replace(new RegExp(strFind, 'g'), strReplace);

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