Reguläre Ausdrücke / RegExp

Beispielsammlung regulärer Ausdrücke

Mit regulären Ausdrücken kann man Zeichenketten sehr genau durchsuchen und zwar nicht nur nach bestimmten Zeichenfolgen, sondern auch nach bestimmten Zeichenkombinationen beispielsweise nach einer gültigen Email Adresse.

Man kann auf 2 Arten reguläre Ausdrücke erzeugen.

Konstruktorfunktion

let myRegExp = new RegExp('abc');

Literalschreibweise (Literal bedeutet es wird in einem Schritt notiert).

let myRegExp = /abc/;

Methoden

Der Typ RegExp und der Typ String stellen einige Methoden bereit mit denen man Zeichenketten durchsuchen kann und Zeichen ersetzen kann: siehe w3schools

RegExp test() exec() toString()

String match() replace() search() split()

Mehrmaliges Vorkommen

Die Methoden liefern immer nur das erste Vorkommen, will man eine Zeichenkette auf alle Vorkommen eines regulären Ausdrucks durchsuchen muss man g hintenanstellen. Das ist ein sogenannter Flag Modifikator.

/abc/g

Flag Modifikatoren
Flag Bedeutung Info
g global der reguläre Ausdruck wird global angewendet. Soll heißen in der gesamten Zeichenkette.
i ignore case Groß und Kleinschreibung wird nicht unterschieden
m multiline Über mehrere Zeilen hinweg.

 

String Methoden und RegExp

test()

Mit der Methode test() kann man abfragen ob die Zeichenfolge oder der reguläre Ausdruck vorkommt. Es wird ein boolscher Wert geliefert.

let gruss = "Hallo Leute!"
let regExp = /llo/;
let check = regExp.test(gruss); //true

siehe Beispiel

match()

siehe auch Mozilla
Liefert das gefundene Ergebnis eines RegExp. Es wird ein Array geliefert mit den gefundenen Ergebnissen. Beachte dass der Flag g gesetzt werden muss.

Beispiel / ähnliches Beispiel

    let wert = "25 Schafe 10 Ziegen 3 Hunde";
    let regExp = /\d+/g;
    var tiere = wert.match(regExp);
    console.log(tiere.length);
    console.log(tiere);
    let anzahl = 0;
    for(let i = 0; i < tiere.length; i++){
        console.log(tiere[i])
        var zahl = Number(tiere[i]);
        anzahl += Number(zahl);
        console.log(anzahl);
    }

replace()

Ersetzt eine Zeichenfolge durch eine andere Zeichenfolge. Es werden 2 Parameter erwartet.

let gruss = "Halli Hallo Leute !";
let regExp = /Halli/;
gruss = gruss.replace(regExp, "Hallo");
console.log(gruss); // "Hallo Hallo Leute !"

exec()

siehe auch exec()

Mit exec kann man sich Treffer ausgeben lassen. Es greift immer nur auf das erste Element zu, wenn man aber mehrere Gruppen gebildet hat, kann man über das Array, welches mit exec geliefert wird auch die einzelnen Gruppen zugreifen.

Beispiel

let regExp = /^(\+?\d{2})\s(\d{2})\s(\d{5,7})$/;
let result = regExp.exec('49 30 123494');
console.log(result[0]);
console.log(result[1]);
console.log(result[2]);
console.log(result[3]);

 

. Punkt

Ein Punkt in einem regulären Ausdruck bedeutet jedes beliebige Zeichen außer Zeilenumbruch. Wenn man einen Punkt 5 mal aufführt, überprüft man, ob die Zeichenkette mindestens 5 beliebige Zeichen enthält. siehe Beispiel

let gruss = "Hallo";
let regExp = /...../;
let check = regExp.test(gruss); //true

| oder

Das Pipe Zeichen (bei den spitzen Klammern) bedeutet oder im Sinne von diese(s) Zeichen oder diese(s).

. jedes Zeichen außer Zeilenumbruch

a das Zeichen a

ab die Zeichenfolge ab

a|b das Zeichen a oder das Zeichen b

Beispiel

   let lied = "Drei Chinesen mit dem Kontrabass";
    let regExp = /ei|a|o|u/g;
    let lied_1 = lied.replace(regExp, "o");
    let lied_2 = lied.replace(regExp, "a")
    

 

Im folgendem Beispiel wird aus einem Array karten = ["pik","kreuz", "herz", "karo"] ein zufälliges Element ausgewählt und dann überprüft, ob es ein schwarzes Zeichen ist. Wenn es pik oder kreuz ist, ist es ein schwarzes Zeichen.
siehe Beispiel (Quelltext)

Zeichenklassen []

Eine Zeichenklasse in einem regulären Ausdruck wird innerhalb von eckigen Klammern definiert. Damit kann man überprüfen ob eines der Zeichen vorkommt.
siehe Beispiel

let regExp = /[alWe]/;
let check = regExp.test("Hallo Welt"); // true

Das obige Beispiel würde aber auch bei folgendem regExp true liefern [alWd], obwohl kein d vorkommt, aber es kommt mindestens eins der anderen Zeichen vor.

Desweiteren kann man noch bestimmen, ob bestimmte Zeichen nicht vorkommen und man kann mit dem Bindestrich einen von-bis Bereich bestimmen.

Achtung Probiere diese Beispiele genau aus. denn es bedeutet nicht, dass alle aufgeführten Zeichen vorkommen müssen oder nicht vorkommen dürfen. [^0-9] bedeutet, wenn eines der Zeichen keine Zahl ist, wird true geliefert. Es bedeutet nicht, dass alles Zahlen sein müssen.

Zeichenklassen
Bezeichnung Beispiel Info
einfache Klasse [abe] Liefert true wenn eines der Zeichen, a, b oder e ist.
Negation [^ab] keines der Zeichen aber ein beliebiges anderes Zeichen. Wenn ein Zeichen nicht a oder b ist, wird true geliefert.
Bereich [a-zA-Z]

Wenn Buchstaben vorkommen wird true geliefert. [0-9] enstpricht allen Dezimalzahlen von 0 bis 9.

 

x|y Entweder x oder y FF0000|0000FF entspricht "FF0000" in "BGCOLOR=#FF0000" und "0000FF" in "FONT COLOR=#0000FF" Beispiel

Vieles ist einfacher mit vordefinierten Zeichenklassen

Vordefinierte Zeichenklassen
Notation Alternative Info
. ein beliebiges Zeichen außer Zeilenvorschub
.ar entspricht "tar" und "rar" im Satz "ein Star ist rar"
\d [0-9] Ziffer von 0 bis 9
\d entspricht "3" in "C3PO" und "2" in "Apartment 2G"
\D [^0-9] Zeichen welches keine Zahl ist
\D entspricht "S" in "900S" und "Q" in "Q45"
\s [\t\n\x0B\f\r] Whitespace, Leerraum
\sbuchen entspricht "buchen" in "jetzt buchen", es entspricht jedoch nichts in "verbuchen"
\S Zeichen das kein Leerraum ist. Ein druckbares Zeichen
\Sbuchen entspricht "buchen" in "verbuchen", es entspricht jedoch nichts in "jetzt buchen"
\w [A-Za-z0-9_] Ein beliebiges alphanumerisches Zeichen, einschließlich Unterstrich. Wortzeichen, Buchtstaben und Zahlen
gr\w* entspricht "graue" in "der graue Hund" und sowohl "grosse" als auch "graue" in "der grosse graue Hund" Beispiel
\W [^A-Za-z0-9_] Ein beliebiges Zeichen, nicht jedoch alphanumerisch. Entspricht
\W entspricht "&" in "Hinz & Kunz" und "%" in "100 %"

Begrenzungen: Anfang, Ende, Wortbegrenzung

Eine Zahl mit mindestens 3 Stellen könnte man so definieren:

let myRegExp = /[\d][\d][\d]/;

Allerdings muss es keine dreistellige Zahl sein, denn man definiert ja nur einen Teilbereich von 3 Stellen. Das heißt vorne und hinten können noch weitere Zeichen vorkommen.

^Anfang

Mit ^ definiert man den Anfang (das ^ Zeichen liegt auf der ersten Taste unter der Esc Taste. Es erscheint erst wenn man danach ein Leerzeichen drückt)

/^A/ greift bei allen Zeichenketten, die mit einem großen A beginnen.

$ Ende

Mit $ definiert man das Ende.

/r$/ Eine Zeichenkette die mit einem r endet.

/^[\d][\d][\d]$/ eine dreistellige Zahl Beispiel

/^[\d]{3}$/ Mit {3} bestimmt man, wie oft das voranstehende Zeichen vorkommen muss.Beispiel

\b Begrenzung auf ein Wort

\b ist der Anfang oder das Ende eines Wortes

/\bfliege\b/

Das obige Beispiel greift bei "Ich fliege nach Rom" aber nicht bei "Mein Haustier ist eine Stubenfliege."

Zeichen Entspricht   Beispiel
^ Anfang der Eingabe oder Zeile ^T ^T entspricht "T" in "Tanzen und Singen", jedoch nicht in "Onkel Tom`s Hütte"
$ Ende der Eingabe oder Zeile h$ h$ entspricht "h" in "hoch", nicht jedoch in "Höhe"
\b Eine Wortabgrenzung (beispielsweise ein Leerzeichen oder ein Zeilenumbruch) \bb entspricht "b" in "buchen", es entspricht jedoch nichts in "Lorbeer" oder "Snob" weitere Beispiele oben
\B keine Wortabgrenzung \Bb entspricht "b" in "Lorbeer", es entspricht jedoch nichts in "buchen"

 

Quantifizierer

Mit Quantifizierern kann man bestimmen wieviele Vorkommen eines Zeichens oder einer Zeichenklasse vorhanden sein müssen.

Quantifizierer
  Definition Beispiel Erklärung
? Das voranstehende Zeichen höchstens 1 mal oder gar nicht(d. h., das voranstehende Zeichen ist optional). bl?au entspricht "blau in "tiefblau" und "bau" in "verbauen", es entspricht jedoch keiner Zeichenfolge in "schlau" oder "Umlaut" oder "bllau"
* Das voranstehende Zeichen 0 Mal oder mehrmals um* entspricht "um" in "Raum", "umm" in "summen" und "u" in "Kugel"
+ Das voranstehende Zeichen 1 Mal oder mehrmals um+ entspricht "um" in "Raum" und "umm" in "summen", es entspricht jedoch keiner Zeichenfolge in "Kugel"
{n} Genau n Vorkommen des voranstehenden Zeichens e{2} e{2} entspricht "ee" in "leer" und den beiden ersten "e" in "Seeelefant", es entspricht jedoch keiner Zeichenfolge in "Geld"
{n,} Mindestens n Vorkommen des voranstehenden Zeichens. e{2,} Hinter die Mindestanzahl wird ein Komma notiert. Entspricht "ee" "Tee" oder "leer" und entspricht "e" in "eins"
{n,m} Mindestens n und höchstens m Vorkommen des voranstehenden Zeichens F{2,4} F{2,4} entspricht "FF" in "#FF0000" und den ersten vier "F" in "#FFFFFF"
?= n Definiert einen String, auf den der String n folgt /Ene(?= Mene)/ /Ene(?= Mene)/ entspricht "Ene" in "Ene Mene Miste". Achtung Leerzeichen hinter ?= setzen.
siehe auch logisches und und dieses Beispiel

 

Nicht druckbare Zeichen
Zeichen Entspricht
\f Formularvorschub
\n Zeilenvorschub
\r Zeilenumbruch
\t Ein Tabulator

Gruppen

In Regulären Ausdrücken kann man Gruppen bilden. Diese werden in normalen Klammern eingeschlossen. Ein Vorteil dieser Gruppen ist, dass man auch Quantifizierer auf diese Gruppen anwenden kann.

Zum Beispiel eine Telefonnummer kann mit einem + Zeichen beginnen, gefolgt von einer zweistelligen Zahl, dann Leerzeichen, eine zweitstellige Zahl, Leerzeichen, eine fünf bis sieben stellige Zahl.

/^(\+?\d{2})\s(\d{2})\s(\d{5,7}$/

Mit der Funktion exec() kann man auf diese Gruppen zugreifen.

PHP Beispiel Passwort

 


Javascript Tipps