„Alles ersetzen“ in JavaScript: Von alten Krücken zum modernen Standard
Stellen Sie sich vor: Sie schreiben einen Chatbot, und ein Benutzer hat eine Nachricht mit dem Tippfehler „Hallo“ gesendet. Sie müssen alle Vorkommen von „a“ durch „e“ ersetzen. Oder Sie parsen eine CSV-Datei und möchten alle überflüssigen Leerzeichen entfernen. Klingt einfach? In JavaScript war das bis vor kurzem ein echter Kopfschmerz.
Die Frage „How do I replace all occurrences of a string?“ ist eine der beliebtesten auf Stack Overflow. Tausende Entwickler sind an dieser scheinbar einfachen Aufgabe gescheitert. Warum? Weil die gute alte replace()-Methode standardmäßig nur die erste Übereinstimmung ersetzt. Der Trick? Man muss einen regulären Ausdruck mit dem Flag g verwenden. Aber im Jahr 2025 haben wir eine viel elegantere Lösung.
In diesem Artikel analysieren wir alle aktuellen Methoden, um alle Vorkommen eines Teilstrings in JavaScript zu ersetzen: von der Klassik bis zu modernen Standards. Sie erfahren, welche Methode Sie für verschiedene Aufgaben wählen sollten und warum replaceAll Ihr neuer bester Freund ist.
Warum funktioniert das alte replace() nicht „out of the box“?
Beginnen wir mit der Enttäuschung, die jeden Anfänger ereilt hat:
let text = "Ich liebe JavaScript, JavaScript ist cool!";let newText = text.replace("JavaScript", "Python");console.log(newText); // Ausgabe: "Ich liebe Python, JavaScript ist cool!"Sehen Sie? Es wurde nur das erste Vorkommen ersetzt. Die Methode String.prototype.replace() ist historisch so konzipiert. Wenn Sie ihr einen String (und keinen regulären Ausdruck) übergeben, sucht und ersetzt sie die erste Übereinstimmung. Für viele Sprachen (Python, Java) war das ein Schock. Aber JavaScript lebte lange mit dieser Einschränkung.
Übrigens, wenn Sie auf Russisch nach der Antwort auf die Frage „how do I replace all occurrences of a string in JavaScript“ suchen, wissen Sie: Bis 2021 war die einzige zuverlässige Methode die Verwendung von RegExp.
Methode Nr. 1: Klassiker — replace() + RegExp (immer noch aktuell)
Dies ist die „Altväter“-Methode, die in allen Browsern funktioniert, einschließlich Internet Explorer (ja, er lebt noch irgendwo). Das Geheimnis ist das Flag g (global).
let text = "Die Katze fraß die Maus. Die Katze ist zufrieden.";let newText = text.replace(/Katze/g, "Hund");console.log(newText); // "Der Hund fraß die Maus. Der Hund ist zufrieden."Vorteile:
- Funktioniert überall (IE11, alte Node.js-Versionen)
- Leistungsstark: Sie können Erfassungsgruppen, Flags wie
i(Groß-/Kleinschreibung ignorieren) verwenden - Sehr schnell
Nachteile:
- Sie müssen Sonderzeichen escapen (Punkt, Sternchen usw.)
- Der Code ist für Anfänger weniger lesbar
- Nicht geeignet, wenn der zu ersetzende String dynamisch ist (vom Benutzer kommt)
Wenn Sie einen dynamischen String ersetzen müssen, verwenden Sie den RegExp-Konstruktor:
function escapeRegExp(string) { return string.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');}
let userInput = "hallo.welt";let text = "hallo.welt, wie geht's? hallo.welt!";let safePattern = escapeRegExp(userInput);let result = text.replace(new RegExp(safePattern, 'g'), 'tschüss.alles');console.log(result);// "tschüss.alles, wie geht's? tschüss.alles!"Die Funktion escapeRegExp ist ein obligatorisches Ritual, wenn Sie mit Benutzereingaben arbeiten. Andernfalls wird der Punkt im String als „beliebiges Zeichen“ interpretiert.
Methode Nr. 2: Moderner Standard — replaceAll() (ES2021+)
Seit ES2021 (ECMAScript 2021) haben wir String.prototype.replaceAll(). Dies ist die Antwort auf die Frage „how do I replace all occurrences of a string in JavaScript“, auf die wir jahrelang gewartet haben.
let text = "Ich liebe JavaScript, JavaScript ist cool!";let newText = text.replaceAll("JavaScript", "Python");console.log(newText); \