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, in dem alle Treffer 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 jeden Treffer 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
replaceAll(pattern, replacement)
Parameter
pattern
-
Kann ein String oder ein Objekt mit einer
Symbol.replace
Methode sein — das typische Beispiel hierfür ist ein regulärer Ausdruck. Jeder Wert, der nicht dieSymbol.replace
Methode hat, wird in einen String konvertiert.Wenn
pattern
ein Regex ist, dann muss es das globale (g
) Flag gesetzt haben, oder es wird eineTypeError
ausgelöst. replacement
-
Kann ein String oder eine Funktion sein. Das Ersatzmuster hat die gleichen Semantiken wie bei
String.prototype.replace()
.
Rückgabewert
Ein neuer String, bei dem alle Vorkommen eines Musters durch ein Ersatzmuster ersetzt werden.
Ausnahmen
TypeError
-
Wird ausgelöst, wenn das
pattern
ein Regex ist, das nicht das globale (g
) Flag gesetzt hat (seineflags
-Eigenschaft enthält kein"g"
).
Beschreibung
Diese Methode verändert nicht den String-Wert, auf den sie angewendet wird. 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 Regex dynamisch konstruiert mit RegExp()
zu verwenden, um alle Instanzen eines Strings zu ersetzen, kann dies unbeabsichtigte Folgen haben, wenn der String Sonderzeichen enthält, die in regulären Ausdrücken eine Bedeutung haben (was passieren kann, wenn der Ersatzstring aus Benutzereingaben stammt). Obwohl Sie diesen Fall mit RegExp.escape()
entschärfen können, indem Sie den regulären Ausdrucksstring in ein wörtliches Muster umwandeln, ist es besser, einfach replaceAll()
zu verwenden und den String ohne Umwandlung in ein Regex zu übergeben.
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 codiert und hat daher dasselbe Ergebnis wie replace()
(abgesehen von der zusätzlichen Eingabevalidierung, dass das Regex global ist).
Wenn das pattern
ein leerer String ist, wird das Ersatzmuster zwischen jedem UTF-16-Codeeinheit eingefügt, ähnlich dem Verhalten von split()
.
"xxx".replaceAll("", "_"); // "_x_x_x_"
Für weitere Informationen darüber, wie Regex-Eigenschaften (insbesondere das sticky Flag) mit replaceAll()
interagieren, siehe RegExp.prototype[Symbol.replace]()
.
Beispiele
Verwendung von replaceAll()
"aabbcc".replaceAll("b", ".");
// 'aa..cc'
Nicht-globaler Regex wirft einen Fehler
Wenn ein regulärer Ausdruck als Suchwert verwendet wird, muss er global sein. Dies funktioniert nicht:
"aabbcc".replaceAll(/b/, ".");
// TypeError: replaceAll must be called with a global RegExp
Das wird funktionieren:
"aabbcc".replaceAll(/b/g, ".");
("aa..cc");
Spezifikationen
Specification |
---|
ECMAScript® 2026 Language Specification # sec-string.prototype.replaceall |