Websiteentwicklung: JavaScript: Objekte: RegExp
Das RegExp-Objekt für reguläre Ausdrücke
BearbeitenDie regulären Ausdrücke (Regular Expression, RegExp) erlauben, Zeichenketten mit Mustern zu vergleichen. Damit kann man beispielsweise überprüfen, ob eine E-Mail-Adresse, die in ein Formularfeld eingegeben wurde, eine zulässige Form hat.
Das Objekt RegExp und Reguläre Ausdrücke wurden in JavaScript 1.2 eingeführt,[1] das heißt mit Netscape 4.0 Mitte 1997. Mit Instanzen des RegExp-Objekts können reguläre Ausdrücke verarbeitet werden. Die Eigenschaften des RegEx-Objekts speichern Informationen über die zuletzt mit einem regulären Ausdruck durchgeführte Operation. Reguläre Ausdrücke können insbesondere in vier Methoden des String-Objektes benutzt werden: match()
, search()
, replace()
, und split()
.
Metazeichen
BearbeitenMetazeichen oder Funktionszeichen, erklärt Wikipedia sinngemäß, sind Zeichen in einer Zeichenkette, die in einem bestimmten Zusammenhang nicht für sich selbst stehen, sondern ähnlich wie Steuerzeichen eine besondere Bedeutung für die Verarbeitung der Daten haben. Für die Definition von regulären Ausdrücken werden solche Zeichen mit besonderer Bedeutung verwendet.
Insbesondere die Zeichen * + ? . ( ) [ ] { } \ / | ^ $
haben in regulären Ausdrücken eine besondere Bedeutung, sollen sie in einem regulären Ausdruck nicht diese besondere Bedeutung haben, sondern als Zeichen selber gesucht werden, so muss man jedem dieser Zeichen einen Rückwärtsstrich "\" voranstellen.
Zeichenklassen
BearbeitenZeichenklassen stehen für genau ein Zeichen aus einer Menge bestimmter Zeichen. Die gemeinten Zeichen werden im einfachsten Fall nur zwischen eckigen Klammern nebeneinander geschrieben.
Syntax | Steht für / bedeutet | Beispielkode | Beispiel findet |
---|---|---|---|
[…]
|
eines der Zeichen zwischen den Klammern | /M[ae]n/ |
Man, Men |
/[0-9]/ |
jede Ziffer | ||
/[a-z]/ |
jeden Kleinbuchstaben | ||
/[a-zßäöü]/ |
jeden Kleinbuchstaben inkl. ß und Umlaut | ||
/[A-Z]/ |
jeden Großbuchstaben | ||
/[a-zA-Z]/ |
jeden großen oder kleinen Buchstaben | ||
[^…]
|
keines der Zeichen zwischen den Klammern | /M[^ae]n/ |
Min, Mon |
Spezielle Metazeichen
BearbeitenMetazeichen | Steht für / bedeutet | Gleichbedeutend mit | Beispielkode | Beispiel findet |
---|---|---|---|---|
\d
|
Ziffer von 0-9 (engl. digit character) | [0-9]
|
/\d\d\d/ |
328 |
\D
|
Nicht-Ziffer | [^0-9]
|
/\D\D/ |
alles außer Ziffern |
\f
|
Seitenvorschubzeichen (engl. form feed) | /\f/ |
||
\n
|
Zeilenvorschubzeichen (engl. new line) | /\n/ |
||
\r
|
Wagenrücklaufzeichen (engl. carriage return) | /\r/ |
||
\t
|
Tabulatorzeichen | /\t/ |
||
\v
|
vertikales Tabulatorzeichen | /\v/ |
||
\s
|
Leerzeichen, Tabulator oder Zeilenumbruch (engl. whitespace character); siehe auch nachfolgende Erklärung zum Begriff „Whitespace“) | /E-Mail\sAdresse/ |
E-Mail Adresse | |
\S
|
Nichtleerzeichen | /E-Mail\SAdresse/ |
E-Mail-Adresse | |
\w
|
Buchstaben, Ziffer oder Unterstrich (engl. word character) | [a-zA-Z0-9_]
|
/\w\w/ |
_A |
\W
|
keinen Buchstaben, keine Ziffer und keinen Unterstrich | [^a-zA-Z0-9_]
|
/\W/ |
% |
.
|
jedes Zeichen, außer Zeilenumbruch | [^\x0A\x0D\u2028\u2029]
|
/./ |
A |
()
|
Findet und merkt es sich intern | /(Erde)/ |
Mit dem aus dem Englischen entlehnten Begriff Whitespace (Plural: Whitespaces) bezeichnen JavaScript-Programmierer jedes der folgenden Zeichen: das Leerzeichen, das Tabulatorzeichen, das vertikale Tabulatorzeichen, das Zeichen für den Zeilenwechsel (engl. new line), für den Wagenrücklauf (engl. carriage return) und für den Blattvorschub (engl. line feed).
Anker
BearbeitenAnker schränken ein, wo in der durchsuchten Zeichenkette das gesuchte Zeichenmuster stehen darf.
Metazeichen | Steht für | Beispielkode | Beispiel findet | Erläuterung |
---|---|---|---|---|
\b
|
Wortgrenze (engl. word boundary) |
/\bMathe/ |
"Mathe", "Mathearbeit", … | Die Wortgrenze ist selber kein Zeichen. Ein Wort im Sinne der regulären Ausdrücke beginnt nach einem Zeichen aus der Klasse [^a-zA-Z0-9_] oder nach dem Zeichenkettenbeginn und endet vor einem Zeichen der erwähnten Klasse bzw. vor dem Zeichenkettenende.
|
\B
|
Nicht-Wortgrenze | /\Bee/ |
"Meer", "Lee", … | |
/\bMathe\B/ |
"Mathe" in z.B. Mathematik und Mathelehrer | |||
^
|
Beginn einer Zeichenkette | /^Montag/ |
||
$
|
Ende einer Zeichenkette | /Ende\.$/ |
"Ende." | \. steht hier für den Punkt als Zeichen, da der Punkt ohne vorangestellten Schrägstich für ein beliebiges Zeichen außer den Zeilenumbruch steht.
|
Quantifikatoren
BearbeitenQuantifikatoren sind Zeichen, die angeben, wie oft ein Zeichen vorkommen darf. Der Quantifikator steht immer hinter dem Zeichen, dessen Häufigkeit er vorgibt. Statt des Begriffs Quantifikator werden gelegentlich die Begriffe Multiplikator, Replikator, Vervielfacher oder Quantifier verwendet.
Quantifikator | Steht für / bedeutet | Beispielkode | Beispiel findet | Erläuterung |
---|---|---|---|---|
?
|
keinmal oder genau einmal | /\d?/ |
"" oder 1 | \d steht hierbei für eine Ziffer (0-9)
|
/\bTipp?\b/ |
"Tip" und "Tipp" | \b steht hierbei für eine Wortgrenze
| ||
*
|
kein-, ein- oder mehrmals | /\d*/ |
"", 1 oder 1234 | \d , eine Ziffer (0-9)
|
+
|
ein- oder mehrmals | /\d+/ |
1 oder 1234 | |
{n}
|
n-mal, wobei n eine ganze Zahl ist. | /\b\d{5}\b/ |
eine fünfstellige Zahl | \b steht hierbei für eine Wortgrenze
|
Modifikatoren
BearbeitenModifikator | Steht für / bedeutet | Beispielkode | Beispiel findet |
---|---|---|---|
//g
|
global, so oft wie es vorkommt | /ee/g |
|
//i
|
case insensitiv, unabhängig von der Groß-/Kleinschreibung | /me/i |
Beispiel
BearbeitenIm Beispiel wird jedes Zeichen, das weder eine Ziffer (0-9) noch ein Komma ist, durch einen Leerstring ersetzt. Dadurch werden unter anderem alle Buchstaben gelöscht. Zum Ersetzen dient hier die Methode replace()
des Objekts String.
<html>
<head>
<script type="application/javascript">
<!--
function nurZahlen(el) {
el.value = el.value.replace(/[^,\d]/g, "");
}
//-->
</script>
</head>
<body>
<form action="#">
<fieldset>
<legend>RegExp-Beispiel - Nur Ganzzahlen oder Kommazahlen ohne Vorzeichen werden akzeptiert</legend>
<input type="text" onkeyup="nurZahlen(this)" name="eingabe" size="20" value="" style="text-align:right;">
</fieldset>
</form>
</body>
</html>
Beispiel 2 - Funktionsaufruf für die Ersetzung
BearbeitenIn einigen Fällen ist es notwendig, dass man mit dem gefundenen Textstelle komplexer Konvertierung durchführen möchte. Dann wird die durch den regulären Ausdrack gefundene Textstelle durch eine Funktion verarbeitet, dessen Rückgabewert den gefundenen Ausdruck dann wieder mit der replace-Funktion ersetzt. In dem folgenden Beispiel wollen wir Variable finden, die aus einer Buchstabenfolge (A-Z bzw. a-z) und einer Ziffernfolge besteht. In der Funktion verwandeln wir den gefundenen Ausdruck in Großbuchstaben.
- In dem Textfeld steht der Text "Dies ist ein Text, der die Variable x45 und meinWert9808 enthält."
- Die Funktion "konvertiereText()" übernimmt die Aufgabe der Konvertierung.
- Der reguläre Ausdruck, der Variable aus Buchstaben gefolgt von Zahlen findet lautet /[A-Za-z]+[0-9]+/g
- Die Funktion, die gefundene Textstellen verarbeitet, erhält den vom regulären Ausdruck gefundene Textstelle über den Parameter "gefunden".
- Die Variable "ersetzen ist in diesem Fall nur einführenden Beispiel nur eine Ersetzung in Großbuchstaben. In diesem Fall wird also "x45" durch "X45" und "meinWert9808" durch "MEINWERT9808" ersetzt.
- Nach der Ausführung von konvertiereText() erhält die "Textarea" ausgabe den verarbeiteten Text.
<html>
<head>
<script type="application/javascript">
<!--
function konvertiereText(elin) {
var elout = document.getElementById("ausgabe");
elout.value = elin.value.replace(/[A-Za-z]+[0-9]+/g, function (gefunden) {
var ersetzen = gefunden.toUpperCase()
return ersetzen
});
}
//-->
</script>
</head>
<body>
<form action="#">
<fieldset>
<legend>RegExp-Beispiel - in dem gefundene Textstellen mit einer Funktion ersetzt werden</legend>
<input type="text" onchange="konvertiereText(this)" name="eingabe" size="20" value="Dies ist ein Text, der die Variable x45 und meinWert9808 enthält." style="text-align:right;">
<br>
<textarea id="ausgabe">
</textarea>
</fieldset>
</form>
</body>
</html>
Literatur über Reguläre Ausdrücke
Bearbeiten- Tony Stubblebine: Regular Expressions Pocket Reference. 2. Auflage. O'Reilly, 2007, ISBN 978-0596514273 (Beschreibt das Thema auch für andere gängige Sprachen.).
Einzelnachweise
Bearbeiten- ↑ Stubblebine a.a.O., S. 77