| [ Web Proxy ] |
| Viewing: https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Errors/Requires_global_RegExp | [Back] [Original] |
Get to know MDN better
Dieser Inhalt wurde automatisch aus dem Englischen bersetzt, und kann Fehler enthalten. Erfahre mehr ber dieses Experiment.
Der JavaScript-Fehler "TypeError: matchAll/replaceAll must be called with a global RegExp" tritt auf, wenn die Methode String.prototype.matchAll() oder String.prototype.replaceAll() mit einem RegExp-Objekt verwendet wird, das nicht das global-Flag gesetzt hat.
TypeError: String.prototype.matchAll called with a non-global RegExp argument (V8-based) TypeError: String.prototype.replaceAll called with a non-global RegExp argument (V8-based) TypeError: matchAll must be called with a global RegExp (Firefox) TypeError: replaceAll must be called with a global RegExp (Firefox) TypeError: String.prototype.matchAll argument must not be a non-global regular expression (Safari) TypeError: String.prototype.replaceAll argument must not be a non-global regular expression (Safari)
TypeError
Die Methoden String.prototype.matchAll() und String.prototype.replaceAll() erfordern ein RegExp-Objekt mit dem global-Flag. Dieses Flag zeigt an, dass der regulre Ausdruck alle Vorkommen in der Eingabestring erkennen kann, anstatt beim ersten Treffer zu stoppen. Obwohl das g-Flag bei der Verwendung dieser Methoden redundant ist (da diese Methoden immer einen globalen Ersatz durchfhren), ist es dennoch erforderlich, um die Absicht klarzustellen.
Es ist erwhnenswert, dass die Validierung des g-Flags in den Methoden matchAll und replaceAll erfolgt. Wenn Sie stattdessen die Methode [Symbol.matchAll]() von RegExp verwenden, erhalten Sie diesen Fehler nicht, aber es wird nur ein einzelner Treffer gefunden.
"abc".matchAll(/./); // TypeError
"abc".replaceAll(/./, "f"); // TypeError
Wenn Sie eine globale bereinstimmung/einen globalen Ersatz durchfhren mchten: Fgen Sie entweder das g-Flag hinzu oder erstellen Sie ein neues RegExp-Objekt mit dem g-Flag, falls Sie den ursprnglichen regulren Ausdruck unverndert lassen mchten.
[..."abc".matchAll(/./g)]; // [[ "a" ], [ "b" ], [ "c" ]]
"abc".replaceAll(/./g, "f"); // "fff"
const existingPattern = /./;
const newPattern = new RegExp(
existingPattern.source,
`${existingPattern.flags}g`,
);
"abc".replaceAll(newPattern, "f"); // "fff"
Wenn Sie nur eine einzelne bereinstimmung/einen einzelnen Ersatz durchfhren mchten: Verwenden Sie stattdessen String.prototype.match() oder String.prototype.replace(). Sie knnen auch die [Symbol.matchAll]()-Methode verwenden, wenn Sie einen Iterator wie matchAll wnschen, der nur einen Treffer enthlt, aber dies wird sehr verwirrend sein.
"abc".match(/./); // [ "a" ]
"abc".replace(/./, "f"); // "fbc"
[..././[Symbol.matchAll]("abc")]; // [[ "a" ]]
Der Bauplan fr ein besseres Internet.
Teile dieses Inhalts sind 19982026 von einzelnen mozilla.org-Mitwirkenden. Inhalte sind verfgbar unter einer Creative-Commons-Lizenz.
| Web Proxy Viewer | New URL | Original Page |