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 ein 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 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 regulärer Ausdruck ist, muss dieser das globale (g
) Flag gesetzt haben, sonst wird einTypeError
ausgelöst. replacement
-
Kann ein String oder eine Funktion sein. Das Replacement hat die gleichen Semantiken wie die von
String.prototype.replace()
.
Rückgabewert
Ein neuer String, bei dem alle Übereinstimmungen eines Musters durch ein Replacement ersetzt wurden.
Ausnahmen
TypeError
-
Ausgelöst, wenn das
pattern
ein regulärer Ausdruck ist, der nicht das globale (g
) Flag gesetzt hat (dessenflags
-Eigenschaft enthält nicht"g"
).
Beschreibung
Diese Methode verändert nicht den String-Wert, auf dem sie aufgerufen wird. Sie gibt einen neuen String zurück.
Im Gegensatz zu replace()
würde diese Methode alle Vorkommen eines Strings ersetzen, nicht nur das erste. Das ist besonders nützlich, wenn der String nicht statisch bekannt ist, da das Aufrufen des RegExp()
-Konstruktors ohne Escape-Zeichen für Sonderzeichen unbeabsichtigt seine Semantiken ändern könnte.
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. Der Rückgabewert wird der Rückgabewert von replaceAll()
. In diesem Fall ist das Verhalten von replaceAll()
vollständig durch die [Symbol.replace]()
-Methode kodiert und daher wird es das gleiche Ergebnis wie replace()
haben (abgesehen von der zusätzlichen Eingabevalidierung, dass der Regex global ist).
Wenn das pattern
ein leerer String ist, wird das Replacement zwischen jede UTF-16-Codeeinheit eingefügt, ähnlich wie das Verhalten von split()
.
"xxx".replaceAll("", "_"); // "_x_x_x_"
Für mehr Informationen darüber, wie Regex-Eigenschaften (besonders das sticky-Flag) mit replaceAll()
interagieren, sehen Sie RegExp.prototype[Symbol.replace]()
.
Beispiele
Verwendung von replaceAll()
"aabbcc".replaceAll("b", ".");
// 'aa..cc'
Nicht-globaler Regex wirft eine Ausnahme
Bei der Verwendung eines regularen Ausdruck-Suchwertes muss dieser global sein. Das wird nicht funktionieren:
"aabbcc".replaceAll(/b/, ".");
// TypeError: replaceAll must be called with a global RegExp
Das 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