Es gibt jetzt eine fertiger Vorschlag zur Eingliederung String.prototype.replaceAll
in die offizielle Spezifikation aufgenommen. Letztendlich müssen die Entwickler keine eigenen Implementierungen für replaceAll
- stattdessen werden moderne Javascript-Engines dies von Haus aus unterstützen.
Der Vorschlag befindet sich in Phase 4, die bedeutet dass alles vollständig ist und nur noch die Browser mit der Umsetzung beginnen müssen.
Es hat ausgeliefert in den neuesten Versionen von Chrome, Firefox und Safari.
Hier sind die Einzelheiten der Umsetzung:
Gemäß dem aktuellen TC39-Konsens, String.prototype.replaceAll
verhält sich identisch zu String.prototype.replace
in allen Fällen, außer für die beiden folgenden Fälle:
- Si
searchValue
ist eine Zeichenkette, String.prototype.replace
ersetzt nur ein einziges Vorkommen der searchValue
in der Erwägung, dass String.prototype.replaceAll
Ersetzt alle Vorkommen des searchValue
(als ob .split(searchValue).join(replaceValue)
oder ein globaler regulärer Ausdruck mit korrekten Großbuchstaben verwendet wurde).
- Si
searchValue
ist ein nicht-globaler regulärer Ausdruck, String.prototype.replace
ersetzt einen einzelnen Treffer, während String.prototype.replaceAll
eine Ausnahme auslöst. Dies geschieht, um die inhärente Verwirrung zwischen dem Fehlen eines globalen Kennzeichens (das "NICHT alles ersetzen" impliziert) und dem Namen der aufgerufenen Methode (der stark auf "alles ersetzen" hindeutet) zu vermeiden.
Bemerkenswert, String.prototype.replaceAll
verhält sich genau wie String.prototype.replace
wenn searchValue
ist ein globaler regulärer Ausdruck.
Sie können eine spezifizierungskonforme Polyfill sehen aquí .
In unterstützten Umgebungen wird das folgende Snippet protokolliert foo-bar-baz
, ohne einen Fehler zu verursachen:
const str = 'foo bar baz';
console.log(
str.replaceAll(' ', '-')
);