Ich möchte eine globale Ersetzung von Zeichenfolge mithilfe von String.replace in Javascript durchführen.
In der Dokumentation habe ich gelesen, dass ich dies mit/g machen kann, d. H.
var mystring = mystring.replace(/test/g, mystring);
und dies wird alle Vorkommnisse in Mystring ersetzen. Keine Anführungszeichen für den Ausdruck.
Aber wenn ich eine Variable finde, wie kann ich dies ohne Anführungszeichen tun?
Ich habe so etwas ausprobiert:
var stringToFind = "test";
//erster Versuch
mystring = mystring.replace('/' + stringToFind + '/g', mystring);
// zweiter Versuch, nicht viel Sinn
mystring = mystring.replace(/stringToFind/g, mystring);
aber sie arbeiten nicht. Irgendwelche Ideen?
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"
Falls Sie dies in einer Funktion benötigen
replaceGlobally(original, searchTxt, replaceTxt) {
const regex = new RegExp(searchTxt, 'g');
return original.replace(regex, replaceTxt) ;
}
Für Regex new RegExp(stringtofind, 'g');
. ABER. Wenn "find" Zeichen enthält, die speziell für Regex sind, haben sie ihre Regex-Bedeutung. Wenn Sie also versucht haben, das '.' in 'abc.def' mit 'x' erhalten Sie 'xxxxxxx' - whoops.
Wenn Sie nur einen einfachen String-Ersatz benötigen, brauchen Sie keine regulären Ausdrücke! Hier ist die einfache Zeichenfolge ersetzen:
mystring= mystring.split(stringtofind).join(replacementstring);
Reguläre Ausdrücke sind viel langsamer als die Suche nach Zeichenketten. Das Erstellen von regulären Ausdrücken mit Escape-Suchzeichenfolge ist daher keine optimale Methode. Selbst wenn Sie die Zeichenfolge durchlaufen, wäre die Zeichenfolge zwar schneller, ich empfehle jedoch die Verwendung vorkompilierter Methoden.
Hier ist eine schnelle und saubere Methode für das schnelle Ersetzen der globalen Zeichenkette:
sMyString.split(sSearch).join(sReplace);
Und das ist es.
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);
Das ist ein regulärer Ausdruck, keine Zeichenfolge. Verwenden Sie den Konstruktor für ein RegExp-Objekt, um einen Regex dynamisch zu erstellen.
var r = new RegExp(stringToFind, 'g');
mystring.replace(r, 'some replacement text');
Versuchen:
var stringToFind = "test";
mystring = mystring.replace(new RegExp(stringToFind, "g"), mystring);
Sie können die folgende Lösung verwenden, um eine globale Ersetzung für eine Zeichenfolge mit einer Variablen in '/' und '/ g' durchzuführen:
myString.replace(new RegExp(strFind, 'g'), strReplace);
Dynamischer globaler Ersatz
Ich bin zu diesem Thread gekommen und habe nach einer etwas komplexeren Lösung gesucht, die hier nicht beantwortet wird. Ich habe jetzt die Antwort gefunden, also werde ich sie posten, falls andere sie für nützlich halten.
Ich wollte eine dynamische globale Ersetzung durchführen, bei der die Ersetzungszeichenfolgen auf den ursprünglichen Übereinstimmungen basieren.
B. den ersten Buchstaben aller Wörter (z. B. "cat sat mat" in "cat sat mat") mit einem globalen Suchwort ersetzen. So machen Sie das.
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"
Wenn Sie Variablen interpolieren möchten, müssen Sie das RegExp-Objekt verwenden
https://developer.mozilla.org/de/Core_JavaScript_1.5_Guide/Regular_Expressions
Beispiel:
var str = "This is my name";
var replace = "i";
var re = new RegExp(replace, 'g')
str = str.replace(re, 'p');
alert(str);
Sie können folgende Methode verwenden
siehe diese Funktion:
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);
}
Syntax:
/ search_string/{g | gi}
woher
Sie können diesen JSBIN-Link überprüfen