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 einen replacement
ersetzt werden. Das pattern
kann ein String oder ein RegExp
sein, und der 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
Syntax
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 nicht über dieSymbol.replace
-Methode verfügt, wird in einen String umgewandelt.Wenn
pattern
ein Regex ist, dann muss es das globale (g
) Flag gesetzt haben, ansonsten wird einTypeError
ausgelöst. replacement
-
Kann ein String oder eine Funktion sein. Der Ersatz hat dieselbe Semantik wie der von
String.prototype.replace()
.
Rückgabewert
Ein neuer String, bei dem alle Übereinstimmungen eines Musters durch einen Ersatz ersetzt wurden.
Ausnahmen
TypeError
-
Wird ausgelöst, wenn das
pattern
ein Regex ist, das nicht das globale (g
) Flag gesetzt hat (dieflags
-Eigenschaft enthält kein"g"
).
Beschreibung
Diese Methode verändert den String-Wert, auf den sie angewendet 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 dynamisch konstruierten globalen Regex über 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 könnte, wenn der Ersatzstring aus Benutzereingaben kommt). Während Sie diesen Fall mit RegExp.escape()
mildern können, um den regulären Ausdruck zu einem literalen Muster zu machen, ist es besser, einfach replaceAll()
zu verwenden und den String zu übergeben, ohne ihn in ein Regex umzuwandeln.
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
-Objekten), wird diese Methode mit dem Zielstring und dem replacement
als Argumenten aufgerufen. Ihr Rückgabewert wird zum Rückgabewert von replaceAll()
. In diesem Fall wird das Verhalten von replaceAll()
vollständig durch die [Symbol.replace]()
-Methode bestimmt und wird daher dasselbe Ergebnis wie replace()
haben (abgesehen von der zusätzlichen Eingabevalidierung, dass das Regex global ist).
Wenn das pattern
ein leerer String ist, wird der Ersatz zwischen jede UTF-16-Code-Einheit 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-globales Regex wirft einen Fehler
Bei Verwendung eines regulären Ausdrucks als Suchwert muss dieser global sein. Das hier wird nicht funktionieren:
"aabbcc".replaceAll(/b/, ".");
// TypeError: replaceAll must be called with a global RegExp
Das hier wird funktionieren:
"aabbcc".replaceAll(/b/g, ".");
("aa..cc");
Spezifikationen
Specification |
---|
ECMAScript® 2025 Language Specification # sec-string.prototype.replaceall |
Browser-Kompatibilität
BCD tables only load in the browser