web-dev-qa-db-ger.com

Wie kann ich in Javascript eine globale Ersetzung von Zeichenfolgen durch eine Variable in '/' und '/ g' durchführen?

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?

58
avastreg
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) ;
  }
175

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);
65
bobince

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.

35
Lex
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

14
unigogo

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');
3
Alex Wayne

Versuchen:

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

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);
2
dSd

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"
1
Robin Winslow

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);
1
Philip Reynolds

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 

  • g ist ein globaler Ersatz für Groß- und Kleinschreibung 
  • gi ist ein globaler Ersatz für Groß- und Kleinschreibung

Sie können diesen JSBIN-Link überprüfen 

http://jsbin.com/nohuroboxa/edit?html,js,output

0
Fahad