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 Zeichenfolgenwert zurück, bei dem alle Vorkommen eines pattern
durch ein replacement
ersetzt werden. Das pattern
kann eine Zeichenkette oder ein RegExp
sein, und das replacement
kann eine Zeichenkette oder eine Funktion sein, die für jedes Vorkommen aufgerufen wird. Die ursprüngliche Zeichenfolge 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 eine Zeichenkette 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 eine Zeichenkette umgewandelt.Wenn
pattern
ein Regex ist, dann muss es das globale (g
)-Flag gesetzt haben, oder einTypeError
wird ausgelöst. replacement
-
Kann eine Zeichenkette oder eine Funktion sein. Das
replacement
hat dieselbe Semantik wie das vonString.prototype.replace()
.
Rückgabewert
Eine neue Zeichenfolge, bei der alle Vorkommen eines Musters durch eine Ersetzung 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 Zeichenfolgenwert, auf dem sie aufgerufen wird. Sie gibt eine neue Zeichenfolge zurück.
Im Gegensatz zur replace()
Methode ersetzt diese Methode alle Vorkommen einer Zeichenkette, nicht nur das erste. Obwohl es auch möglich ist, replace()
mit einem dynamisch konstruierten globalen Regex mit RegExp()
zu verwenden, um alle Instanzen einer Zeichenkette zu ersetzen, kann dies unbeabsichtigte Folgen haben, wenn die Zeichenkette Sonderzeichen enthält, die in regulären Ausdrücken eine Bedeutung haben (was passieren kann, wenn die Ersatzzeichenkette aus Benutzereingaben stammt). Während Sie diesen Fall mit RegExp.escape()
abmildern können, um die reguläre Ausdruckszeichenkette in ein literales Muster zu verwandeln, ist es besser, einfach replaceAll()
zu verwenden und die Zeichenkette 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
-Objekten), wird diese Methode mit der Zielzeichenkette und replacement
als Argumente aufgerufen. Der Rückgabewert wird der Rückgabewert von replaceAll()
. In diesem Fall wird 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 der Regex global ist).
Wenn das pattern
eine leere Zeichenkette ist, wird die Ersetzung zwischen jedem UTF-16-Codezeichen eingefügt, ähnlich wie das 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-globale Regex-Würfe
Bei der Verwendung eines regulären Ausdruckssuchwerts muss dieser global sein. Dies wird nicht funktionieren:
"aabbcc".replaceAll(/b/, ".");
// TypeError: replaceAll must be called with a global RegExp
Dies wird funktionieren:
"aabbcc".replaceAll(/b/g, ".");
("aa..cc");
Spezifikationen
Specification |
---|
ECMAScript® 2025 Language Specification # sec-string.prototype.replaceall |