| [ Web Proxy ] |
| Viewing: https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Global_Objects/RegExp/exec | [Back] [Original] |
Get to know MDN better
Dieser Inhalt wurde automatisch aus dem Englischen bersetzt, und kann Fehler enthalten. Erfahre mehr ber dieses Experiment.
Diese Funktion ist gut etabliert und funktioniert auf vielen Gerten und in vielen Browserversionen. Sie ist seit Juli 2015 browserbergreifend verfgbar.
Die exec() Methode von RegExp Instanzen fhrt eine Suche mit diesem regulren Ausdruck in einem angegebenen String durch und gibt ein Ergebnis-Array oder null zurck.
const regex = /fo+/g;
const str = "table football, foosball";
let array;
while ((array = regex.exec(str)) !== null) {
console.log(`Found ${array[0]}. Next starts at ${regex.lastIndex}.`);
// Expected output: "Found foo. Next starts at 9."
// Expected output: "Found foo. Next starts at 19."
}
exec(str)
strDer String, gegen den der regulre Ausdruck abgeglichen wird. Alle Werte werden in Strings umgewandelt, daher fhrt das Weglassen oder bergeben von undefined dazu, dass exec() nach dem String "undefined" sucht, was selten gewnscht ist.
Wenn der Abgleich fehlschlgt, gibt die exec() Methode null zurck und setzt den lastIndex des Regex auf 0.
Bei erfolgreichem Abgleich gibt die exec() Methode ein Array zurck und aktualisiert die lastIndex Eigenschaft des Regulren Ausdrucksobjekts. Das zurckgegebene Array enthlt den abgeglichenen Text als erstes Element und dann ein Element fr jede erfasste Gruppe des abgeglichenen Textes. Das Array hat auerdem die folgenden zustzlichen Eigenschaften:
indexDer 0-basierte Index des Abgleichs im String.
inputDer Original-String, der abgeglichen wurde.
groupsEin null-Prototyp-Objekt von benannten Erfassungsgruppen, deren Schlssel die Namen und deren Werte die Erfassungsgruppen sind, oder undefined, wenn keine benannten Erfassungsgruppen definiert wurden. Siehe Erfassungsgruppen fr weitere Informationen.
indices OptionalDiese Eigenschaft ist nur vorhanden, wenn das d Flag gesetzt ist. Es ist ein Array, in dem jeder Eintrag die Grenzen eines Teilstring-Abgleichs darstellt. Der Index jedes Elements in diesem Array entspricht dem Index des jeweiligen Teilstring-Abgleichs im von exec() zurckgegebenen Array. Mit anderen Worten, der erste indices Eintrag reprsentiert den gesamten Abgleich, der zweite indices Eintrag die erste Erfassungsgruppe, usw. Jeder Eintrag selbst ist ein Zwei-Elemente-Array, wobei die erste Zahl den Startindex des Abgleichs und die zweite Zahl dessen Endindex reprsentiert.
Das indices Array hat zustzlich eine groups Eigenschaft, die ein null-Prototyp-Objekt von allen benannten Erfassungsgruppen enthlt. Die Schlssel sind die Namen der Erfassungsgruppen und jeder Wert ist ein Zwei-Elemente-Array, wobei die erste Zahl den Startindex und die zweite Zahl den Endindex der Erfassungsgruppe darstellt. Wenn der regulre Ausdruck keine benannten Erfassungsgruppen enthlt, ist groups undefined.
JavaScript RegExp Objekte sind zustandsbehaftet, wenn die global oder sticky Flags gesetzt sind (z.B. /foo/g oder /foo/y). Sie speichern einen lastIndex aus dem vorherigen Abgleich. exec() kann intern verwendet werden, um ber mehrere Abgleiche in einem Textstring zu iterieren (mit Erfassungsgruppen), im Gegensatz dazu, nur die bereinstimmenden Strings mit String.prototype.match() zu erhalten.
Wenn exec() verwendet wird, hat das globale Flag keine Auswirkung, wenn das Sticky-Flag gesetzt ist der Abgleich ist immer sticky.
exec() ist die primitive Methode von Regexps. Viele andere Regex-Methoden rufen intern exec() auf einschlielich derjenigen, die von String-Methoden aufgerufen werden, wie [Symbol.replace](). Whrend exec() selbst mchtig ist (und am effizientesten), vermittelt es oft nicht am deutlichsten die Absicht.
RegExp.prototype.test() stattdessen.String.prototype.match() stattdessen. Auerdem hilft String.prototype.matchAll(), das bereinstimmen mehrerer Teile eines Strings (mit Erfassungsgruppen) zu vereinfachen, indem Sie ber die Abgleiche iterieren knnen.String.prototype.search().exec() ist ntzlich fr komplexe Operationen, die nicht leicht mit einer der oben genannten Methoden erreicht werden knnen, oft wenn Sie lastIndex manuell anpassen mssen. (String.prototype.matchAll() kopiert den Regex, daher beeinflusst das ndern von lastIndex whrend der Iteration ber matchAll die Iteration nicht.) Fr ein solches Beispiel siehe rewinding lastIndex.
Betrachten Sie folgendes Beispiel:
// Match "quick brown" followed by "jumps", ignoring characters in between
// Remember "brown" and "jumps"
// Ignore case
const re = /quick\s(?<color>brown).+?(jumps)/dgi;
const result = re.exec("The Quick Brown Fox Jumps Over The Lazy Dog");
Die folgende Tabelle zeigt den Zustand von result nach dem Ausfhren dieses Skripts:
| Eigenschaft | Wert |
|---|---|
[0] |
"Quick Brown Fox Jumps" |
[1] |
"Brown" |
[2] |
"Jumps" |
index |
4 |
indices |
[[4, 25], [10, 15], [20, 25]]groups: { color: [10, 15 ]} |
input |
"The Quick Brown Fox Jumps Over The Lazy Dog" |
groups |
{ color: "Brown" } |
Zustzlich wird re.lastIndex auf 25 gesetzt, da dieser Regex global ist.
Wenn Ihr regulrer Ausdruck das g Flag verwendet, knnen Sie die Methode exec() mehrmals ausfhren, um aufeinanderfolgende Abgleiche im selben String zu finden. In diesem Fall beginnt die Suche an dem Teilstring von str, der durch die lastIndex Eigenschaft des regulren Ausdrucks angegeben wird (test() wird auch die lastIndex Eigenschaft voranbringen). Beachten Sie, dass die lastIndex Eigenschaft nicht zurckgesetzt wird, wenn ein anderer String durchsucht wird; die Suche beginnt bei ihrem bestehenden lastIndex.
Zum Beispiel, nehmen Sie folgendes Skript an:
const myRe = /ab*/g;
const str = "abbcdefabh";
let myArray;
while ((myArray = myRe.exec(str)) !== null) {
let msg = `Found ${myArray[0]}. `;
msg += `Next match starts at ${myRe.lastIndex}`;
console.log(msg);
}
Dieses Skript zeigt den folgenden Text an:
Found abb. Next match starts at 3 Found ab. Next match starts at 9
Warnung: Es gibt viele Fallstricke, die dazu fhren knnen, dass dies zu einer Endlosschleife wird!
RegExp Konstruktor) nicht in der while Bedingung es wird den Regex bei jeder Iteration neu erstellen und lastIndex zurcksetzen.g) Flag gesetzt ist, oder lastIndex wird niemals vorangebracht./^/gm), erhhen Sie dessen lastIndex manuell bei jedem Mal, um nicht an derselben Stelle festzuhngen.Sie knnen diese Art von Code normalerweise durch String.prototype.matchAll() ersetzen, um ihn weniger fehleranfllig zu machen.
Sie knnen exec() auch verwenden, ohne explizit ein RegExp Objekt zu erstellen:
const matches = /(hello \S+)/.exec("This is a hello world!");
console.log(matches[1]);
Dies wird eine Nachricht mit 'hello world!' protokollieren.
| Spezifikation |
|---|
| ECMAScript 2027 LanguageSpecification # sec-regexp.prototype.exec |
RegExpRegExpObject/FunctionDer 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 |