Alternierung und Teilausdrücke
Durch Alternierung in einem regulären Ausdruck können Sie Auswahlen zwischen zwei oder mehr Alternativen gruppieren. Im wesentlichen können Sie "This OR that" angeben.
Teilausdrücke ermöglichen es Ihnen, eine Entsprechung für ein Muster in gesuchtem Text zu finden und die Übereinstimmung in mehrere Teilentsprechungen zu unterteilen. Die resultierenden Teilübereinstimmungen können vom Programm abgerufen werden. Mit Teilausdrücken können außerdem Texte umformatiert werden, wie in Rückverweise in JScript beschrieben.
Weitere Informationen zu regulären Ausdrücken finden Sie unter Erstellen eines regulären Ausdrucks und Syntax regulärer Ausdrücke.
Alternierung
Sie können mithilfe des Pipezeichens (|) eine Auswahl zwischen zwei oder mehr Alternativen angeben. Dies wird als Alternierung bezeichnet. Es wird die größtmögliche Übereinstimmung auf beiden Seiten des Pipezeichens gesucht. Bei dem folgenden JScript-Ausdruck kann leicht irrtümlich angenommen werden, dass sowohl "Chapter" als auch "Section" gefolgt von einer oder zwei Ziffern zu einer Übereinstimmung führen.
/Chapter|Section [1-9][0-9]{0,1}/
Stattdessen findet der reguläre Ausdruck nur eine Entsprechung für das Wort "Chapter" ohne Ziffern, oder aber für das Wort "Section" einschließlich nachgestellter Ziffern. Wenn die Suchzeichenfolge "Section 22" ist, wird die Übereinstimmung "Section 22" gefunden. Wenn die Suchzeichenfolge jedoch "Chapter 22" ist, wird nur eine Übereinstimmung mit "Chapter", nicht aber mit "Chapter 22" gefunden.
Alternierung mit Klammern
Sie können den Bereich der Alternierung mithilfe von Klammern einschränken und so gewährleisten, dass die Alternierung nur für die beiden Wörter "Chapter" und "Section" gilt. Sie können durch Hinzufügen von Klammern auch angeben, dass der reguläre Ausdruck entweder mit "Chapter 1" oder mit "Section 3" übereinstimmt.
Klammern werden jedoch auch verwendet, um Teilausdrücke zu erstellen. Die resultierende Teilübereinstimmung kann vom Programm abgerufen werden.
Im folgenden regulären Ausdruck JScript werden Klammern verwendet, um "Chapter" und "Section" zusammenzufassen. Mögliche Übereinstimmungen schließen dann "Chapter" gefolgt von einer Ziffer ein.
/(Chapter|Section) [1-9][0-9]{0,1}/
Die Klammern um Chapter|Section geben auch an, dass beide Wörter für die zukünftige Verwendung gespeichert werden.
Im folgenden Beispiel wird gezeigt, wie Übereinstimmungen und Teilentsprechungen im Code abgerufen werden können. Da der obige Ausdruck nur einen Satz Klammern im Ausdruck enthält, wird nur eine Teilentsprechung gespeichert.
var re = /(Chapter|Section) [1-9][0-9]{0,1}/g
var src = "Chapter 50 Section 85"
ShowMatches(src, re);
// Output:
// Chapter 50
// submatch 1: Chapter
// Section 85
// submatch 1: Section
// Perform a search on a string by using a regular expression,
// and display the matches and submatches.
function ShowMatches(src, re)
{
var result;
// Get the first match.
result = re.exec(src);
while (result != null)
{
// Show the entire match.
print();
print(result[0]);
// Show the submatches.
for (var index=1; index<result.length; index++)
{
print("submatch " + index + ": " + result[index]);
}
// Get the next match.
result = re.exec(src);
}
}
Alternierung ohne gespeicherte Teilentsprechung
Im vorherigen Beispiel gruppieren Sie mit den runden Klammern lediglich die Auswahl zwischen den Wörtern "Chapter" und "Section".
Um zu verhindern, dass die Teilentsprechung für die spätere Verwendung gespeichert wird, können Sie den Teilausdruck (?:Muster) verwenden. Im folgenden Beispiel wird die gleiche Aufgabe wie im vorherigen Beispiel realisiert, aber die Teilentsprechung wird nicht gespeichert.
var re = /(?:Chapter|Section) [1-9][0-9]{0,1}/g
var src = "Chapter 50 Section 85"
ShowMatches(src, re);
// Output:
// Chapter 50
// Section 85
Teilausdrücke
Durch das Hinzufügen von Klammern in einem regulären Ausdruck wird ein Teilausdruck erstellt. Die resultierende Teilübereinstimmung kann vom Programm abgerufen werden.
Im folgenden Beispiel enthält der reguläre Ausdruck drei Teilausdrücke. Die Teilübereinstimmungszeichenfolgen werden zusammen mit jeder Entsprechung angezeigt.
var re = /(\w+)@(\w+)\.(\w+)/g
var src = "Please send mail to george@contoso.com and someone@example.com. Thanks!"
ShowMatches(src, re);
// The ShowMatches function is provided earlier.
// Output:
// george@contoso.com
// submatch 1: george
// submatch 2: contoso
// submatch 3: com
// someone@example.com
// submatch 1: someone
// submatch 2: example
// submatch 3: com
Im folgenden Beispiel wird ein URI (Universal Resource Indicator) in seine Komponenten unterteilt.
Der erste Teilausdruck in Klammern speichert den Protokollteil der Webadresse. Der Teilausdruck entspricht jedem Wort, das vor einem Doppelpunkt und zwei normalen Schrägstrichen steht. Der zweite Teilausdruck in Klammern speichert den Domänenadressteil der Adresse. Der Teilausdruck entspricht einer beliebigen Zeichenfolge, die keinen Schrägstrich (/) und keinen Doppelpunkt (:) enthält. Der dritte Teilausdruck in Klammern speichert die Anschlussnummer einer Website, falls vorhanden. Er entspricht 0 (null) oder mehr Ziffern, die auf einen Doppelpunkt folgen. Der vierte Teilausdruck in Klammern speichert den Pfad und/oder die Seite, der bzw. die in der Webadresse angegeben ist. Er entspricht 0 (null) oder mehr Zeichen, die kein Nummernzeichen (#) und kein Leerzeichen enthalten.
var re = /(\w+):\/\/([^\/:]+)(:\d*)?([^# ]*)/gi;
var src = "https://msdn.microsoft.com:80/scripting/default.htm";
ShowMatches(src, re);
// Output:
// https://msdn.microsoft.com:80/scripting/default.htm
// submatch 1: http
// submatch 2: msdn.microsoft.com
// submatch 3: :80
// submatch 4: /scripting/default.htm
Positive und negative Lookaheads
Ein positiver Lookahead ist eine Suche, bei der, nachdem eine Übereinstimmung gefunden wurde, das Suchen der nächsten Übereinstimmung vor dem gefundenen Text beginnt. Die Übereinstimmung wird nicht für die spätere Verwendung gespeichert. Um einen positiven Lookahead anzugeben, verwenden Sie die Syntax (?=Muster).
Im folgenden Beispiel wird eine Suche ausgeführt, die ermittelt, ob ein Kennwort 4 bis 8 Zeichen lang ist und mindestens eine Ziffer enthält.
Im regulären Ausdruck findet .*\d eine beliebige Anzahl von Zeichen gefolgt von einer Ziffer. Für die gesuchte Zeichenfolge "abc3qr" entspricht dies "abc3". Nicht nach, sondern vor dieser Übereinstimmung wird dann mit .{4,8} eine Zeichenfolge mit 4 bis 8 Zeichen gesucht. Dies entspricht "abc3qr".
^ und $ geben die Positionen am Start und dem Ende der gesuchten Zeichenfolge an. Auf diese Weise wird eine Übereinstimmung verhindert, wenn die gesuchte Zeichenfolge außerhalb der übereinstimmenden Zeichen weitere Zeichen enthält.
var re = /^(?=.*\d).{4,8}$/gi
var src = "abc3qr"
ShowMatches(src, re);
// The ShowMatches function is provided earlier.
// Output:
// abc3qr
Ein negativer Lookahead sucht nach einer Suchzeichenfolge, die nicht mit dem Muster in einem negativen Lookaheadausdruck übereinstimmt. Nachdem eine Übereinstimmung gefunden wurde, startet die Suche nach der nächsten Übereinstimmung vor dem gefundenen Text. Die Übereinstimmung wird nicht für die spätere Verwendung gespeichert. Um einen negativen Lookahead anzugeben, verwenden Sie die Syntax (?!Muster).
Im folgenden Beispiel wird eine Entsprechung für Wörter gefunden, die nicht mit "th" beginnen.
Im regulären Ausdruck entspricht \b einer Wortgrenze. Für die gesuchte Zeichenfolge " quick " entspricht dies dem ersten Leerzeichen. (?!th) entspricht einer Zeichenfolge, die nicht "th" ist. Dies entspricht "qu". Beim Starten vor dieser Übereinstimmung entspricht \w+ einem Wort. Dies entspricht "quick".
var re = /\b(?!th)\w+\b/gi
var src = "The quick brown fox jumps over the lazy dog."
ShowMatches(src, re);
// Output:
// quick
// brown
// fox
// jumps
// over
// lazy
// dog