String.prototype.replaceAll()

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since August 2020.

Die replaceAll() Methode von String-Werten gibt einen neuen String zurück, bei dem alle Übereinstimmungen eines pattern durch eine replacement ersetzt werden. Das pattern kann ein String oder ein RegExp sein, und das replacement kann ein String oder eine Funktion sein, die für jede Übereinstimmung aufgerufen wird. Der ursprüngliche String bleibt unverändert.

Probieren Sie es aus

const paragraph = "I think Ruth's dog is cuter than your dog!";

console.log(paragraph.replaceAll("dog", "monkey"));
// Expected output: "I think Ruth's monkey is cuter than your monkey!"

// Global flag required when calling replaceAll with regex
const regex = /dog/gi;
console.log(paragraph.replaceAll(regex, "ferret"));
// Expected output: "I think Ruth's ferret is cuter than your ferret!"

Syntax

js
replaceAll(pattern, replacement)

Parameter

pattern

Kann ein String oder ein Objekt mit einer Symbol.replace-Methode sein — das typische Beispiel ist ein regulärer Ausdruck. Jeder Wert, der die Symbol.replace-Methode nicht hat, wird in einen String umgewandelt.

Wenn pattern ein Regex ist, muss es das globale (g) Flag gesetzt haben, oder es wird ein TypeError ausgelöst.

replacement

Kann ein String oder eine Funktion sein. Das Replacement hat die gleichen Semantiken wie bei String.prototype.replace().

Rückgabewert

Ein neuer String, bei dem alle Vorkommen eines Musters durch ein Replacement ersetzt werden.

Ausnahmen

TypeError

Wird ausgelöst, wenn das pattern ein Regex ist, das nicht das globale (g) Flag gesetzt hat (dessen flags-Eigenschaft enthält nicht "g").

Beschreibung

Diese Methode ändert den String-Wert, auf dem sie aufgerufen wird, nicht. Sie gibt einen neuen String zurück.

Im Gegensatz zu replace(), ersetzt diese Methode alle Vorkommen eines Strings, nicht nur das erste. Während es auch möglich ist, replace() mit einem globalen regulären Ausdruck, der dynamisch mit RegExp() konstruiert wurde, zu verwenden, um alle Instanzen eines Strings zu ersetzen, kann dies unerwünschte Konsequenzen haben, wenn der String Sonderzeichen enthält, die eine Bedeutung in regulären Ausdrücken haben (was passieren kann, wenn der Replacement-String aus Benutzereingaben kommt). Während Sie diesen Fall mit RegExp.escape() mildern können, indem Sie den regulären Ausdruck als Literal-Muster behandeln, ist es besser, replaceAll() zu verwenden und den String zu übergeben, ohne ihn in einen regulären Ausdruck zu konvertieren.

js
function unsafeRedactName(text, name) {
  return text.replace(new RegExp(name, "g"), "[REDACTED]");
}
function safeRedactName(text, name) {
  return text.replaceAll(name, "[REDACTED]");
}

const report =
  "A hacker called ha.*er used special characters in their name to breach the system.";

console.log(unsafeRedactName(report, "ha.*er")); // "A [REDACTED]s in their name to breach the system."
console.log(safeRedactName(report, "ha.*er")); // "A hacker called [REDACTED] used special characters in their name to breach the system."

Wenn pattern ein Objekt mit einer Symbol.replace-Methode ist (einschließlich RegExp-Objekte), wird diese Methode mit dem Zielstring und replacement als Argumente aufgerufen. Ihr Rückgabewert wird der Rückgabewert von replaceAll(). In diesem Fall ist das Verhalten von replaceAll() vollständig durch die [Symbol.replace]() Methode kodiert und hat daher das gleiche Ergebnis wie replace() (abgesehen von der zusätzlichen Eingabevalidierung, dass das Regex global ist).

Wenn das pattern ein leerer String ist, wird das Replacement zwischen jedem UTF-16 Code-Einheit eingefügt, ähnlich dem Verhalten von split().

js
"xxx".replaceAll("", "_"); // "_x_x_x_"

Weitere Informationen darüber, wie Regex-Eigenschaften (insbesondere das sticky-Flag) mit replaceAll() interagieren, finden Sie in RegExp.prototype[Symbol.replace]().

Beispiele

Verwendung von replaceAll()

js
"aabbcc".replaceAll("b", ".");
// 'aa..cc'

Nicht-globales Regex wirft Fehler

Bei Verwendung eines regulären Ausdrucks als Suchwert muss dieser global sein. Das funktioniert nicht:

js
"aabbcc".replaceAll(/b/, ".");
// TypeError: replaceAll must be called with a global RegExp

Das wird funktionieren:

js
"aabbcc".replaceAll(/b/g, ".");
("aa..cc");

Spezifikationen

Specification
ECMAScript® 2026 Language Specification
# sec-string.prototype.replaceall

Browser-Kompatibilität

Siehe auch