JavaScript/Objekte/RegExp/exec

Aus SELFHTML-Wiki
Wechseln zu: Navigation, Suche

Die Methode exec() wendet einen regulären Ausdruck einmalig auf eine Zeichenkette an und gibt einen Array mit dem Treffer des Gesamtausdrucks sowie die Treffer der geklammerten Teilausdrücke zurück. Wenn der Ausdruck nicht auf die Zeichenkette passt, gibt die Methode null zurück.

  • JavaScript 1.2
  • Chrome
  • Firefox
  • IE
  • Opera
  • Safari
Beispiel
<html>
<head>
  <title>Test</title>
</head>
<body>

  <script type="text/javascript">
    var derSatz = "Auf der Mauer, auf der Lauer sitzt 'ne kleine Wanze.";
    var Suche = /der (\w*)(.*)/;
    var Ergebnis = Suche.exec(derSatz);
    document.write("<p>Originaltext: '<i>" + Ergebnis.input + "<\/i>'<\/p>");
    document.write("<p>Treffer des Gesamtausdrucks: '<i>" + Ergebnis[0] +"<\/i>' an der Position " + Ergebnis.index + "<\/p>");
    document.write("<p>Die Treffer der Teilausdrücke im Einzelnen:<\/p>");
    document.write("<ol>");
    for (var i = 1; i < Ergebnis.length; i++) {
        document.write("<li>'<i>" + Ergebnis[i] + "<\/i>'<\/li>");
    }
    document.write("<\/ol>");
</script>

</body>
</html>

Das Beispiel demonstriert die Anwendung eines regulären Ausdrucks auf eine Zeichenkette und den umfassenden Zugriff auf die Treffer und Teiltreffer. Zunächst wird ein regulärer Ausdruck mit dem Namen Suche definiert. Er besteht aus dem festen Anfang der gefolgt von einer beliebigen Anzahl von alphanumerischen Zeichen bzw. oder Unterstrichen (\w*) . Danach kann eine beliebige Anzahl von beliebigen Zeichen folgen (.*). Um die Teilausdrücke \w* und .* sind jeweils Klammern notiert, sodass später deren Treffer ausgelesen werden können.

Mit dem Methoden-Aufruf Suche.exec() wird der reguläre Ausdruck auf eine Zeichenkette angewandt. Als Parameter wird der Methode der zu durchsuchende Ausdruck übergeben. Die Methode gibt einen Array mit den Treffern zurück, der in der Variable Ergebnis gespeichert wird.

Im Folgenden werden die Informationen aus dem Array ausgegeben. Das erste Element des Arrays (mit dem Index 0) ist der Treffer des Gesamtausdrucks. In den nachfolgenden Array-Elementen (mit dem Index 1 und darüber) sind die Teilstrings gespeichert, auf die die eingeklammerte Ausdrucksteile gepasst haben.

Das Beispiel durchläuft den Array mit einer for-Schleife und gibt auf diese Weise alle Teiltreffer aus. Zudem werden zwei besondere Objekteigenschaften des von exec() zurückgegebenen Arrays demonstriert: index und input. Diese kennt ein gewöhnlicher Array nicht. In der Eigenschaft index ist die Index-Position des Treffers des Gesamtausdrucks gespeichert (beginnend mit 0 für das erste Zeichen der Zeichenkette). In der Eigenschaft input ist die Zeichenkette gespeichert, auf die der Ausdruck mittels exec() angewendet wurde.

Beispiel
<html>
<head>
  <title>Test</title>
</head>
<body>

  <script type="text/javascript">
     var derSatz = "Auf der Mauer, auf der Lauer sitzt 'ne kleine Wanze.";
     var Suche = /auf der (\w*)/gi;
     var Ergebnis;
     document.write("<ol>");
     while (Ergebnis = Suche.exec(derSatz)) {
        document.write("<li>" + Ergebnis[1] + "<\/li>");
     }
    document.write("<\/ol>");
  </script>

</body>
</html>

Das obige Beispiel veranschaulicht das mehrfache Anwenden von exec(), um alle möglichen Treffer eines Ausdrucks in Erfahrung zu bringen. Eine ähnliche Aufgabe ist zwar mit match() lösbar, aber match() erlaubt keinen Zugriff auf die jeweiligen Teiltreffer. Über RegExp.$1 und folgende Eigenschaften können lediglich die Teiltreffer des letzten Vorkommens gelesen werden. exec() hat diese Einschränkung nicht.

Zunächst wird ein regulärer Ausdruck mit dem Zusatz /.../gi definiert. Die Angabe g stellt sicher, dass exec() mehrmals auf einen String angewendet werden kann und dadurch alle Vorkommen gefunden werden. Die Angabe i stellt sicher, dass die Groß- und Kleinschreibung bei der Suche keine Rolle spielt. Der Ausdruck passt auf den festen Text auf der gefolgt von einem Wort beliebiger Länge (\w*).

Damit exec() genau so oft ausgeführt wird, wie weitere Vorkommen gefunden werden, wird eine spezielle while-Schleife benutzt. Als Schleifenbedingung wird nicht wie üblich ein einfacher logischer Ausdruck (z.B. i > 5) notiert, sondern die Wertzuweisung Ergebnis = Suche.exec(derSatz). - Dies ist möglich, da eine Wertzuweisung ebenfalls ein Ausdruck ist, wie z.B. window.alert(Variable = "Wert"); veranschaulicht. - Ihr Ergebnis gleicht dem des rechten Bestandteils Suche.exec(derSatz), also dem exec()-Aufruf. Dies ist entweder einen Array mit den Suchergebnissen, falls ein Vorkommen gefunden wurde, oder null, falls keine weiteren Vorkommen existieren. Als Ergebnis des Ausdrucks an der Stelle while (Ausdruck) { ... } wird entweder true oder false erwartet. Daher wandelt JavaScript das Ergebnis von Suche.exec(derSatz) entsprechend um. Ein Array gilt als true, sodass die Schleife im Erfolgsfalle fortgesetzt wird. Der Wert null gilt als false, sodass die Schleife abgebrochen wird, nachdem das letzte Vorkommen gefunden wurde.

Im Schleifenkörper wird der Array Ergebnis verwendet. Dieser ist bei jedem Schleifendurchlauf neu gefüllt, da vor jedem Durchlauf die Schleifenbedingung ausgeführt wird - in diesem Fall der Aufruf von exec() und das Speichern des Rückgabewerts in der Variable Ergebnis. Über Ergebnis[1] wird schließlich der Treffer des ersten Teilausdrucks ausgegeben.

Beachten Sie: Wie im Eingangsbeispiel illustriert, können Sie auf die Teiltreffer eines exec()-Aufrufs anstatt über den zurückgegebenen Array auch über RegExp.$1 und folgende Eigenschaften zugreifen. Diese Zugriffsweise wird allerdings seit der JavaScript-Version 1.5 als veraltet eingestuft und ist zumindest im Zusammenhang mit exec() auch praktisch unnötig.