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?

30voto

csomakk Punkte 5111
str = str.replace(new RegExp("abc", 'g'), "");

hat für mich besser funktioniert als die oben genannten Antworten. also new RegExp("abc", 'g') erzeugt einen RegExp, der auf alle Vorkommen passt ( 'g' Flagge) des Textes ( "abc" ). Der zweite Teil ist das, was ersetzt wird, in Ihrem Fall ein leerer String ( "" ). str ist die Zeichenkette, und wir müssen sie außer Kraft setzen, da replace(...) liefert nur das Ergebnis, aber keine Überschreibungen. In manchen Fällen können Sie das verwenden.

28voto

Raseela Punkte 315

Führen Sie eine Schleife durch, bis die Anzahl der Vorkommnisse 0 beträgt, etwa so:

function replaceAll(find, replace, str) {
    while (str.indexOf(find) > -1) {
        str = str.replace(find, replace);
    }
    return str;
}

27voto

Cole Lawrence Punkte 625

Dies ist die schnellste Version, die verwendet keine regulären Ausdrücke .

Überarbeitet jsperf

replaceAll = function(string, omit, place, prevstring) {
  if (prevstring && string === prevstring)
    return string;
  prevstring = string.replace(omit, place);
  return replaceAll(prevstring, omit, place, string)
}

Es ist fast dos veces so schnell wie die Split-and-Join-Methode.

Wie bereits in einem Kommentar erwähnt, funktioniert dies nicht, wenn Ihr omit Variable enthält place , wie in: replaceAll("string", "s", "ss") denn es wird immer in der Lage sein, ein anderes Vorkommen des Wortes zu ersetzen.

Es gibt einen anderen jsperf mit Varianten meines rekursiven replace, die noch schneller sind ( http://jsperf.com/replace-all-vs-split-join/12 )!

  • Update 27. Juli 2017: Es sieht so aus, als hätte RegExp jetzt die schnellste Leistung im kürzlich veröffentlichten Chrome 59.

24voto

rakslice Punkte 8334

Wenn das, was Sie suchen, bereits in einer Zeichenkette enthalten ist und Sie keinen Regex-Escaper zur Hand haben, können Sie join/split verwenden:

    function replaceMulti(haystack, needle, replacement)
    {
        return haystack.split(needle).join(replacement);
    }

    someString = 'the cat looks like a cat';
    console.log(replaceMulti(someString, 'cat', 'dog'));

22voto

Ran Turner Punkte 8004

String.prototype.replaceAll - ECMAScript 2021

Die neue String.prototype.replaceAll() Methode gibt eine neue Zeichenkette zurück, in der alle Übereinstimmungen eines Musters durch eine Ersetzung ersetzt sind. Das Muster kann entweder eine Zeichenkette oder ein RegExp sein, und die Ersetzung kann entweder eine Zeichenkette oder eine Funktion sein, die für jede Übereinstimmung aufgerufen wird.

const message = 'dog barks meow meow';
const messageFormatted = message.replaceAll('meow', 'woof')

console.log(messageFormatted);

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