Je souhaite effectuer un remplacement global de chaîne à l'aide de String.replace en Javascript.
Dans la documentation, j'ai lu que je pouvais le faire avec/g, c'est-à-dire par exemple;
var mystring = mystring.replace(/test/g, mystring);
et cela remplacera toutes les occurrences dans le mystère. 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 travaillent pas. Des idées?
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"
Si vous en avez besoin dans une fonction
replaceGlobally(original, searchTxt, replaceTxt) {
const regex = new RegExp(searchTxt, 'g');
return original.replace(regex, replaceTxt) ;
}
Pour regex, new RegExp(stringtofind, 'g');
. MAIS. Si "find" contient des caractères spéciaux dans regex, ils auront leur signification regexy. Donc, si vous essayez de remplacer le "." dans 'abc.def' avec 'x', vous obtiendrez 'xxxxxxx' - whoops.
Si tout ce que vous voulez, c'est un simple remplacement de chaîne, vous n'avez pas besoin d'expressions régulières! Voici la chaîne simple remplace l'idiome:
mystring= mystring.split(stringtofind).join(replacementstring);
Les expressions régulières sont beaucoup plus lentes que la recherche par chaîne. Donc, créer un regex avec une chaîne de recherche échappée n'est pas une méthode optimale. Même en boucle, la chaîne serait plus rapide, mais je suggère d'utiliser des méthodes pré-compilées intégrées.
Voici un moyen rapide et propre de remplacer rapidement une chaîne globale:
sMyString.split(sSearch).join(sReplace);
Et c'est tout.
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);
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');
Essayer:
var stringToFind = "test";
mystring = mystring.replace(new RegExp(stringToFind, "g"), mystring);
Vous pouvez utiliser la solution suivante pour effectuer un remplacement global sur une chaîne avec une variable entre '/' et '/ g':
myString.replace(new RegExp(strFind, 'g'), strReplace);
Dynamique global remplacer
Je suis venu à ce fil à la recherche d'une solution légèrement plus complexe à laquelle on ne répond pas ici. J'ai maintenant trouvé la réponse, je vais donc la poster au cas où quelqu'un le trouverait utile.
Je voulais faire un remplacement global dynamique, où les chaînes de remplacement sont basées sur les correspondances d'origine.
Par exemple, pour capitaliser la première lettre de tous les mots (par exemple, "cat sat mat" dans "Cat Sat Mat") avec une substitution globale. Voici comment faire ça.
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"
Si vous voulez interpoler les variables, vous devez utiliser l'objet RegExp
https://developer.mozilla.org/fr/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);
Vous pouvez 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);
}
syntaxe:
/ chaîne_recherche/{g | gi}
où
Vous pouvez vérifier ce lien JSBIN