5465 Stimmen

Ersetzen aller Vorkommen einer Zeichenkette in JavaScript

Ich habe diese Zeichenfolge in meinem JavaScript-Code:

"Test abc test test abc test test test abc test test abc"

Tun:

str = str.replace('abc', '');

Scheint nur das erste Vorkommen von abc in der obigen Zeichenfolge.

Wie kann ich die alle Vorkommnisse davon?

103voto

Adnan Toky Punkte 1482

Dies sind die gebräuchlichsten und am besten lesbaren Methoden.

var str = "Test abc test test abc test test test abc test test abc"

Methode 1:

str = str.replace(/abc/g, "replaced text");

Methode 2:

str = str.split("abc").join("replaced text");

Methode 3:

str = str.replace(new RegExp("abc", "g"), "replaced text");

Methode 4:

while(str.includes("abc")){
   str = str.replace("abc", "replaced text");
}

Ausgabe:

console.log(str);
// Test replaced text test test replaced text test test test replaced text test test replaced text

97voto

Elias Van Ootegem Punkte 70638

Aktualisierung:

Es ist etwas spät für ein Update, aber da ich gerade über diese Frage gestolpert bin und festgestellt habe, dass ich mit meiner vorherigen Antwort nicht zufrieden bin. Da es bei der Frage um die Ersetzung eines einzigen Wortes ging, ist es unglaublich, dass niemand an die Verwendung von Wortgrenzen ( \b )

'a cat is not a caterpillar'.replace(/\bcat\b/gi,'dog');
//"a dog is not a caterpillar"

Dies ist eine einfache Regex, die in den meisten Fällen das Ersetzen von Wortteilen vermeidet. Allerdings kann ein Bindestrich - gilt immer noch als Wortgrenze. Daher können in diesem Fall Konditionale verwendet werden, um das Ersetzen von Zeichenketten wie cool-cat :

'a cat is not a cool-cat'.replace(/\bcat\b/gi,'dog');//wrong
//"a dog is not a cool-dog" -- nips
'a cat is not a cool-cat'.replace(/(?:\b([^-]))cat(?:\b([^-]))/gi,'$1dog$2');
//"a dog is not a cool-cat"

Im Grunde genommen ist diese Frage die gleiche wie die hier gestellte Frage: Javascript ersetzt " ' " durch " '' "

@Mike, überprüfen Sie die Antwort, die ich dort gegeben habe... regexp ist nicht der einzige Weg, um mehrere Vorkommen eines Unterbegriffs zu ersetzen, weit davon entfernt. Denken Sie flexibel, denken Sie geteilt!

var newText = "the cat looks like a cat".split('cat').join('dog');

Oder um das Ersetzen von Wortteilen zu verhindern - was die genehmigte Antwort auch tut! Sie können dieses Problem mit regulären Ausdrücken umgehen, die zugegebenermaßen etwas komplexer und dadurch auch etwas langsamer sind:

var regText = "the cat looks like a cat".replace(/(?:(^|[^a-z]))(([^a-z]*)(?=cat)cat)(?![a-z])/gi,"$1dog");

Die Ausgabe ist dieselbe wie bei der akzeptierten Antwort, allerdings unter Verwendung der /cat/g Ausdruck auf diese Zeichenfolge:

var oops = 'the cat looks like a cat, not a caterpillar or coolcat'.replace(/cat/g,'dog');
//returns "the dog looks like a dog, not a dogerpillar or cooldog" ?? 

Ups, das ist wahrscheinlich nicht das, was Sie wollen. Was ist es dann? IMHO, eine Regex, die 'cat' nur bedingt ersetzt. (also nicht Teil eines Wortes), etwa so:

var caterpillar = 'the cat looks like a cat, not a caterpillar or coolcat'.replace(/(?:(^|[^a-z]))(([^a-z]*)(?=cat)cat)(?![a-z])/gi,"$1dog");
//return "the dog looks like a dog, not a caterpillar or coolcat"

Ich vermute, dass dies Ihren Bedürfnissen entspricht. Es ist natürlich nicht absolut sicher, aber es sollte für den Anfang ausreichen. Ich würde empfehlen, noch mehr auf diesen Seiten zu lesen. Das wird sich als nützlich erweisen, um diesen Ausdruck für Ihre speziellen Bedürfnisse zu perfektionieren.

http://www.javascriptkit.com/jsref/regexp.shtml

http://www.regular-expressions.info


Letzter Zusatz:

Da diese Frage immer noch häufig gestellt wird, möchte ich ein Beispiel hinzufügen .replace mit einer Rückruffunktion verwendet. In diesem Fall wird der Ausdruck drastisch vereinfacht und bietet noch mehr Flexibilität, wie das Ersetzen durch korrekte Großschreibung oder das Ersetzen beider cat y cats auf einen Schlag:

'Two cats are not 1 Cat! They\'re just cool-cats, you caterpillar'
   .replace(/(^|.\b)(cat)(s?\b.|$)/gi,function(all,char1,cat,char2)
    {
       //check 1st, capitalize if required
       var replacement = (cat.charAt(0) === 'C' ? 'D' : 'd') + 'og';
       if (char1 === ' ' && char2 === 's')
       {//replace plurals, too
           cat = replacement + 's';
       }
       else
       {//do not replace if dashes are matched
           cat = char1 === '-' || char2 === '-' ? cat : replacement;
       }
       return char1 + cat + char2;//return replacement string
    });
//returns:
//Two dogs are not 1 Dog! They're just cool-cats, you caterpillar

88voto

scronide Punkte 11688

Abgleich mit einem globalen regulären Ausdruck:

anotherString = someString.replace(/cat/g, 'dog');

73voto

Indrajeet Singh Punkte 2830

Für den einmaligen Gebrauch zu ersetzen:

var res = str.replace('abc', "");

Zum mehrfachen Ersetzen verwenden:

var res = str.replace(/abc/g, "");

60voto

SolutionYogi Punkte 30824
str = str.replace(/abc/g, '');

Oder versuchen Sie die replaceAll Methode, wie empfohlen in diese Antwort :

str = str.replaceAll('abc', '');

o:

var search = 'abc';
str = str.replaceAll(search, '');

EDITAR: Klärung über replaceAll Verfügbarkeit

El replaceAll Methode wird hinzugefügt zu String Prototyps. Dies bedeutet, dass er für alle String-Objekte/Literale verfügbar ist.

Beispiel:

var output = "test this".replaceAll('this', 'that'); // output is 'test that'.
output = output.replaceAll('that', 'this'); // output is 'test this'

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X