Wie kann ich in Javascript eine globale Zeichenfolge mit einer Variablen in „/“ und „/g“ ersetzen?

Lesezeit: 3 Minuten

Ich möchte eine globale Zeichenfolge mit String.replace in Javascript ersetzen.

In der Dokumentation habe ich gelesen, dass ich das mit /g machen kann, also zB;

var mystring = mystring.replace(/test/g, mystring);

und dies wird alle Vorkommen in mystring ersetzen. Keine Anführungszeichen für den Ausdruck.

Aber wenn ich eine Variable finden muss, wie kann ich das ohne Anführungszeichen machen?

Ich habe so etwas versucht:

var stringToFind = "test";

//erster Versuch

mystring = mystring.replace("https://stackoverflow.com/" + stringToFind + '/g', mystring);

//Zweiter Versuch, überhaupt nicht viel Sinn

mystring = mystring.replace(/stringToFind/g, mystring);

aber sie funktionieren nicht. Irgendwelche Ideen?

  • Ihre Frage wird hier beantwortet: stackoverflow.com/questions/494035/…

    – Eric Wendelin

    12. Februar 2009 um 16:58 Uhr

Benutzer-Avatar
Paolo Bergantino

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) ;
  }

  • Sie hätten es einfacher machen können: alert(mystring.replace(new RegExp(“world”, “g”), “yay”))

    – Farbcodierung

    4. Mai 2018 um 16:41 Uhr


Benutzer-Avatar
Bobine

Für Regex, new RegExp(stringtofind, 'g');. ABER. Wenn „find“ Sonderzeichen in Regex enthält, haben sie ihre Regexy-Bedeutung. Wenn Sie also versucht haben, das ‘.’ in ‘abc.def’ mit ‘x’ erhalten Sie ‘xxxxxxx’ — hoppla.

Wenn Sie nur eine einfache Zeichenkette ersetzen möchten, brauchen Sie keine regulären Ausdrücke! Hier ist das einfache String-Replace-Idiom:

mystring= mystring.split(stringtofind).join(replacementstring);

  • +1 immer gut zu sehen, dass Leute über die wörtliche Antwort auf die Frage hinausdenken.

    – Thomas

    13. Februar 2009 um 4:40 Uhr

  • Ich frage mich, wie sich dies bei größeren Zeichenfolgen im Vergleich zum Aufruf von RegExp() verschlechtert.

    – Kat

    25. Oktober 2011 um 22:24 Uhr

  • @Kato Ich war auch neugierig, also habe ich einen jsperf-Leistungstest erstellt, um es herauszufinden. Verknüpfung: goo.gl/cbZiV

    – Starbeamrainbowlabs

    27. Januar 2013 um 17:48 Uhr

  • Überprüfen Sie einfach Firefox, und Regex ist am schnellsten. (Ich habe vorher Chrom verwendet)

    – Starbeamrainbowlabs

    27. Januar 2013 um 17:59 Uhr

  • @starbeamrainbowlabs sehr interessante Ergebnisse! Guter alter Internet Explorer; immer unvorhersehbar schlecht zufällige, scheinbar wichtige Dinge 🙂

    – Kat

    27. Januar 2013 um 18:28 Uhr

Reguläre Ausdrücke sind viel langsamer als die Zeichenfolgensuche. Daher ist das Erstellen von Regex mit maskiertem Suchstring kein optimaler Weg. Selbst das Schleifen der 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:

sMyString.split(sSearch).join(sReplace);

Und das ist es.

Benutzer-Avatar
unigogo

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

Benutzer-Avatar
dSd

Sie können die folgende Lösung verwenden, um eine globale Ersetzung für eine Zeichenfolge mit einer Variablen in „https://stackoverflow.com/“ und „/g“ durchzuführen:

myString.replace(new RegExp(strFind, 'g'), strReplace);

  • Dies ist die sauberste Version davon, die ich finden konnte. Dies sollte die akzeptierte Antwort sein!

    – Schankam

    11. Oktober 2018 um 4:36 Uhr

Benutzer-Avatar
Alex Wayne

Das ist ein regulärer Ausdruck, kein String. Verwenden Sie den Konstruktor für ein RegExp-Objekt, um dynamisch eine Regex zu erstellen.

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

  • Dies ist die sauberste Version davon, die ich finden konnte. Dies sollte die akzeptierte Antwort sein!

    – Schankam

    11. Oktober 2018 um 4:36 Uhr

Benutzer-Avatar
Halbmond frisch

Versuchen:

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

  • Ich nehme an, das letzte “mystring” in der Ersetzung ist nicht das, was Sie meinten?

    – KooiInc

    12. Februar 2009 um 19:28 Uhr

1176680cookie-checkWie kann ich in Javascript eine globale Zeichenfolge mit einer Variablen in „/“ und „/g“ ersetzen?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy