Ich möchte eine globale Ersetzung der Zeichenfolge mithilfe von String.replace in Javascript durchführen.
In der Dokumentation habe ich gelesen, dass ich dies mit / g tun kann, dh zum Beispiel;
var mystring = mystring.replace(/test/g, mystring);
und dies wird alle Vorkommen innerhalb von mystring ersetzen. Keine Anführungszeichen für den Ausdruck.
Aber wenn ich eine Variable zu finden habe, wie kann ich das ohne Anführungszeichen tun?
Ich habe so etwas versucht:
var stringToFind = "test";
//erster Versuch
mystring = mystring.replace('/' + stringToFind + '/g', mystring);
// zweiter Versuch, überhaupt nicht viel Sinn
mystring = mystring.replace(/stringToFind/g, mystring);
aber sie funktionieren nicht. Irgendwelche Ideen?
javascript
regex
string
Eric Wendelin
quelle
quelle
Antworten:
Können Sie prototype.js verwenden? Wenn ja, könnten Sie String.gsub verwenden, wie
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"
Es werden auch reguläre Ausdrücke verwendet. Für mich ist dies eine der eleganteren Möglichkeiten, es zu lösen. prototypejs gsub Dokumentation
quelle
myStr.split('a').join('g')
. Benötigt auch nicht prototype.js.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 eine Funktion benötigen
replaceGlobally(original, searchTxt, replaceTxt) { const regex = new RegExp(searchTxt, 'g'); return original.replace(regex, replaceTxt) ; }
quelle
Für Regex ,
new RegExp(stringtofind, 'g');
. ABER. Wenn 'find' Zeichen enthält, die für Regex besonders sind, haben sie ihre Regexy-Bedeutung. Wenn Sie also versucht haben, das '.' In 'abc.def' mit 'x' erhalten Sie 'xxxxxxx' - whoops.Wenn Sie nur einen einfachen String-Ersatz wünschen, sind keine regulären Ausdrücke erforderlich! Hier ist die einfache Zeichenfolge zum Ersetzen von Zeichenfolgen:
quelle
Reguläre Ausdrücke sind viel langsamer als die Zeichenfolgensuche. Das Erstellen von regulären Ausdrücken mit maskierten Suchzeichenfolgen ist daher kein optimaler Weg. Selbst eine Schleife durch die Zeichenfolge wäre schneller, aber ich schlage vor, integrierte vorkompilierte Methoden zu verwenden.
Hier ist eine schnelle und saubere Methode zum schnellen Ersetzen globaler Zeichenfolgen:
Und das ist es.
quelle
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);
Silmiar Post
quelle
str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\,\\\^\$\|\#\s]/g, '\\$&')
Mit der folgenden Lösung können Sie eine Zeichenfolge mit einer Variablen in '/' und '/ g' global ersetzen:
myString.replace(new RegExp(strFind, 'g'), strReplace);
quelle
Das ist ein regulärer Ausdruck, keine Zeichenfolge. Verwenden Sie den Konstruktor für ein RegExp-Objekt, um dynamisch einen regulären Ausdruck zu erstellen.
var r = new RegExp(stringToFind, 'g'); mystring.replace(r, 'some replacement text');
quelle
Versuchen:
var stringToFind = "test"; mystring = mystring.replace(new RegExp(stringToFind, "g"), mystring);
quelle
Wenn Sie Variablen interpolieren möchten, müssen Sie das RegExp-Objekt verwenden
https://developer.mozilla.org/en/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);
quelle
Dynamisches globales Ersetzen
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 und werde sie veröffentlichen, falls jemand anderes sie nützlich findet.
Ich wollte eine dynamische globale Ersetzung durchführen, bei der die Ersetzungszeichenfolgen auf den ursprünglichen Übereinstimmungen basieren.
Zum Beispiel, um den ersten Buchstaben aller Wörter (z. B. "Katzensatmatte" in "Katzensatmatte") mit einem globalen Suchersatz groß zu schreiben. Hier erfahren Sie, wie das geht.
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"
quelle
Sie können dies mit der folgenden Methode tun
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:
wo
Sie können diesen JSBIN-Link überprüfen
http://jsbin.com/nohuroboxa/edit?html,js,output
quelle