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 ?

0voto

Danny Blue Points 21

Cette opération permet de parcourir une chaîne de caractères entière et de remplacer le mot ou la phrase que vous avez choisi par un autre. (un peu compliqué mais ça marche et c'est très réutilisable)

var string = "Ceci est un texte de test. Vous pouvez remplacer toutes les instances de n'importe quel mot/phrase dans ce texte".

var new string = string.findAndReplace("text", "BOO !") ;

Object.prototype.findAndReplace = function( searchText, replace ) {
    var matchCount = 0;
        var text = this;

        for( var i = 0; i<text.length; i++ ) {
            var textSearched = "";

            for(var x = 0; x<searchText.length; x++) {
                var currentText = text[i+x];

                if( currentText != undefined ) {
                    textSearched += currentText;
                }
            }

            if( textSearched == searchText ) {
                matchCount++;
            }

            console.log( textSearched );
        }

        for(var i=0; i<matchCount; i++) {
            text = text.replace( searchText, replace );
        }

        return text;
    }

-23voto

Heat Miser Points 6305

Pouvez-vous utiliser le prototype.js ? Si oui, vous pouvez utiliser String.gsub, comme suit

var myStr = "a day in a life of a thing";
 var replace = "a";
 var resultString = myStr.gsub(replace, "g");
 // resultString will be "g day in g life of g thing"

Il accepte également les expressions régulières. Pour moi, c'est l'une des façons les plus élégantes de résoudre le problème. documentation sur le prototypejs gsub

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