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 Methode replaceAll()
von String
-Werten gibt einen neuen String mit allen Übereinstimmungen eines patterns
zurück, der durch ein replacement
ersetzt wird. 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 dabei 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 dieSymbol.replace
-Methode hat, wird in einen String umgewandelt.Falls das
pattern
ein regulärer Ausdruck ist, muss es das globale (g
) Flag gesetzt haben, andernfalls wird einTypeError
ausgelöst. replacement
-
Kann ein String oder eine Funktion sein. Das Verhalten des
replacements
entspricht dem vonString.prototype.replace()
.
Rückgabewert
Ein neuer String, bei dem alle Vorkommen eines Patterns durch ein Replacement ersetzt wurden.
Ausnahmen
TypeError
-
Wird ausgelöst, wenn das
pattern
ein regulärer Ausdruck ist, der das globale (g
) Flag nicht gesetzt hat (seineflags
-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 globalen regulären Ausdruck, der dynamisch mit RegExp()
konstruiert wird, zu verwenden, um alle Instanzen eines Strings zu ersetzen, kann dies unbeabsichtigte Konsequenzen haben, wenn der String Sonderzeichen enthält, die in regulären Ausdrücken eine Bedeutung haben (was passieren kann, wenn der Ersetzungsstring aus Benutzereingaben stammt). Obwohl Sie diesen Fall mit RegExp.escape()
entschärfen können, um den regulären Ausdruck zu einem wörtlichen Muster zu machen, 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
-Objekte), wird diese Methode mit dem Zielstring und replacement
als Argumente 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 kodiert 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 das Replacement zwischen jede UTF-16-Codeeinheit eingefügt, ähnlich dem 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-globaler Regex wirft einen Fehler
Bei der Verwendung eines regulären Ausdrucks als Suchwert 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 Language Specification # sec-string.prototype.replaceall |
Browser-Kompatibilität
BCD tables only load in the browser