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 ?

4voto

Alex Wayne Points 58113

C'est une expression régulière, pas une chaîne. Utilisez le constructeur d'un objet RegExp pour créer dynamiquement une expression régulière.

var r = new RegExp(stringToFind, 'g');
mystring.replace(r, 'some replacement text');

3voto

Crescent Fresh Points 54070

Essayez :

var stringToFind = "test";
mystring = mystring.replace(new RegExp(stringToFind, "g"), mystring);

2voto

Fahad Points 51

Vous pouvez le faire en utilisant la méthode suivante

voir cette fonction :

function SetValue()
{
    var txt1='This is a blacK table with BLack pen with bLack lady';
    alert(txt1);
    var txt2= txt1.replace(/black/gi,'green');
    alert(txt2);
}

la syntaxe :

/search_string/{g|gi}

donde

  • g est un remplacement global sensible à la casse
  • gi est un remplacement insensible à la casse de blobal

Vous pouvez consulter ce lien JSBIN

http://jsbin.com/nohuroboxa/edit?html,js,output

1voto

Philip Reynolds Points 5118

Si vous voulez que les variables soient interpolées, vous devez utiliser l'objet RegExp

https://developer.mozilla.org/en/Core_JavaScript_1.5_Guide/Regular_Expressions

Exemple :

var str = "This is my name";
var replace = "i";
var re = new RegExp(replace, 'g')    

str = str.replace(re, 'p');
alert(str);

1voto

Robin Winslow Points 2827

Remplacement global dynamique

Je suis venu sur ce fil de discussion à la recherche d'une solution un peu plus complexe qui n'a pas trouvé de réponse ici. J'ai maintenant trouvé la réponse et je vais la poster au cas où quelqu'un d'autre la trouverait utile.

Je voulais faire un remplacement global dynamique, où les chaînes de remplacement sont basées sur les correspondances originales.

Par exemple, pour mettre en majuscule la première lettre de tous les mots (par exemple, "cat sat mat" en "Cat Sat Mat") avec un remplacement global par recherche. Voici comment procéder.

function capitaliseWords(aString) {
    // Global match for lowercase letters following a word boundary
    var letters = aString.match(/\b[a-z]/g), i, letterMatch;
    // Loop over all matched letters
    for( i = 0; i < letters.length; i++ ) {
        // Replace the matched letters with upper case versions
        letterMatch = new RegExp('\\b'+letters[i]); // EDIT - slight fix
        aString = aString.replace(letterMatch, letters[i].toUpperCase());
    }
    // Return our newly capitalised string
    return aString;
}

alert( capitaliseWords("cat sat mat") ); // Alerts "Cat Sat Mat"

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