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 Vorkommen eines pattern
durch einen replacement
ersetzt wurden. Das pattern
kann ein String oder ein RegExp
sein, und der replacement
kann ein String oder eine Funktion sein, die für jedes Vorkommen 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 – typischerweise ein Regulärer Ausdruck. Jeder Wert, der keineSymbol.replace
-Methode besitzt, wird in einen String umgewandelt.Wenn
pattern
ein Regulärer Ausdruck ist, muss er das globale (g
)-Flag gesetzt haben, andernfalls wird einTypeError
ausgelöst. replacement
-
Kann ein String oder eine Funktion sein. Der Ersatzwert hat dieselben Semantiken wie der von
String.prototype.replace()
.
Rückgabewert
Ein neuer String, bei dem alle Vorkommen eines Musters durch einen Ersatzwert ersetzt wurden.
Ausnahmen
TypeError
-
Wird ausgelöst, wenn das
pattern
ein Regulärer Ausdruck ist, der nicht das globale (g
)-Flag gesetzt hat (dessenflags
-Eigenschaft enthält kein"g"
).
Beschreibung
Diese Methode verä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. Es ist zwar auch möglich, replace()
mit einem dynamisch konstruierten globalen Regulären Ausdruck mithilfe von RegExp()
zu verwenden, um alle Instanzen eines Strings zu ersetzen, dies kann jedoch unbeabsichtigte Konsequenzen haben, wenn der String Sonderzeichen enthält, die in regulären Ausdrücken eine Bedeutung haben (was passieren kann, wenn der Ersatz-String aus Benutzereingaben stammt). Während dies durch die Verwendung von RegExp.escape()
zur Umwandlung des regulären Ausdrucksstrings in ein wörtliches Muster entschärft werden kann, ist es besser, einfach replaceAll()
zu verwenden und den String ohne Umwandlung in einen Regulären Ausdruck 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
-Objekten), wird diese Methode mit dem Zielstring und replacement
als Argumente aufgerufen. Der Rückgabewert wird zum Rückgabewert von replaceAll()
. In diesem Fall wird das Verhalten von replaceAll()
vollständig durch die [Symbol.replace]()
-Methode definiert und hat daher dasselbe Ergebnis wie replace()
(abgesehen von der zusätzlichen Eingabevalidierung, dass der Reguläre Ausdruck global ist).
Wenn das pattern
ein leerer String ist, wird der Ersatzwert zwischen jede UTF-16-Codeeinheit eingefügt, ähnlich wie das Verhalten von split()
.
"xxx".replaceAll("", "_"); // "_x_x_x_"
Weitere Informationen darüber, wie Regex-Eigenschaften (insbesondere das sticky-Flag) mit replaceAll()
interagieren, finden Sie unter RegExp.prototype[Symbol.replace]()
.
Beispiele
Verwendung von replaceAll()
"aabbcc".replaceAll("b", ".");
// 'aa..cc'
Nicht-globale Regex löst Fehler aus
Bei der Verwendung eines Regulären Ausdrucks als Suchwert muss dieser global sein. Dies funktioniert nicht:
"aabbcc".replaceAll(/b/, ".");
// TypeError: replaceAll must be called with a global RegExp
Das funktioniert:
"aabbcc".replaceAll(/b/g, ".");
("aa..cc");
Spezifikationen
Specification |
---|
ECMAScript® 2025 Language Specification # sec-string.prototype.replaceall |
Browser-Kompatibilität
Report problems with this compatibility data on GitHubdesktop | mobile | server | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
replaceAll |
Legend
Tip: you can click/tap on a cell for more information.
- Full support
- Full support