Kapitel 14

Regulärer Ausdruck

Ein regulärer Ausdruck ist ein Objekt, das entweder mit dem RegExp-Konstruktor erstellt werden kann oder als Literalwert, indem ein Muster in Schrägstriche (/) eingeschlossen wird. Die Syntaxen zum Erstellen eines regulären Ausdrucks sind unten gezeigt.

// Verwendung des regulären Ausdrucks-Konstruktors
new RegExp(pattern[, flags]);

// Verwendung von Literalen
/pattern/flags

Die Flags sind optional beim Erstellen eines regulären Ausdrucks mit Literalen. Beispiel für die Erstellung eines identischen regulären Ausdrucks mit den oben genannten Methoden:

let re1 = new RegExp("xyz"); 
let re2 = /xyz/;

Beide Methoden erzeugen ein Regex-Objekt und haben die gleichen Methoden und Eigenschaften. Es gibt Fälle, in denen wir dynamische Werte zum Erstellen eines regulären Ausdrucks benötigen – in diesem Fall funktionieren Literale nicht und wir müssen den Konstruktor verwenden.

In Fällen, in denen wir einen Schrägstrich als Teil eines regulären Ausdrucks haben möchten, müssen wir den Schrägstrich (/) mit einem Backslash (\) maskieren.

Die verschiedenen Modifikatoren, die verwendet werden, um eine Groß-/Kleinschreibung-unabhängige Suche durchzuführen, sind:

  • g – globale Suche (findet alle Übereinstimmungen, anstatt nach der ersten Übereinstimmung zu stoppen)

Beispiel :

const str = "Hello world, hello again!";
const regex = /hello/gi;
const matches = str.match(regex);
// Wenn du über .match() nachdenkst, lies das hier 👇
// Es ist eine eingebaute Methode in JavaScript, die verwendet wird, um eine Zeichenkette nach einem Ausdruck abzugleichen. Wenn eine Übereinstimmung gefunden wird, gibt sie ein Array aller gefundenen Übereinstimmungen zurück.
// Wenn nicht, gibt die .match()-Methode null zurück.

console.log(matches); // ["Hello", "hello"]
  • i – Suche ohne Beachtung der Groß-/Kleinschreibung

Beispiel :

const str = "HeLlO WoRlD";
const regex = /hello/i;
const match = regex.test(str);
// Die .test()-Methode gibt einen booleschen Wert zurück:
// true, wenn eine Übereinstimmung gefunden wird, und false, wenn nicht.

console.log(match); // true
  • m – mehrzeiliges Matching

Beispiel :

const str = "This is a\nmultiline string.";
const regex = /./mg;
const matches = str.match(regex);
// Das m-Flag wird verwendet, um Zeilenumbrüche (\n) abzugleichen.
// Das bedeutet, dass der RegEx alle 26 Zeichen in der Zeichenkette abgleicht,
// einschließlich des Zeilenumbruchs.

console.log(matches.length); // 26

Klammern werden in einem regulären Ausdruck verwendet, um einen Zeichenbereich zu finden. Einige davon sind unten aufgeführt.

  • [abc] – findet jedes Zeichen zwischen den Klammern

Beispiel :

const str = "The cat and the dog are both animals.";
const regex = /[abc]/g;
const matches = str.match(regex);

console.log(matches); // Array aller Vorkommen von a, b und c

[
  'c', 'a', 'a',
  'a', 'b', 'a',
  'a'
]
  • [^abc] – findet jedes Zeichen, das nicht zwischen den Klammern ist

Beispiel :

const str = "The cat and dog.";
const regex = /[^abc]/g; // Findet jedes Zeichen, das nicht 'a', 'b' oder 'c' ist
const matches = str.match(regex);

console.log(matches); // Array aller Vorkommen von Zeichen, die nicht 'a', 'b' oder 'c' sind

[
  'T', 'h', 'e', ' ',
  't', ' ', 'n', 'd',
  ' ', 'd', 'o', 'g',
  '.'
]
  • [0-9] – findet jede Ziffer zwischen den Klammern

Beispiel :

const str = "The price of the item is $25, but it may change to $30.";
const regex = /[0-9]/g; // Findet jede Ziffer von 0 bis 9
const matches = str.match(regex);

console.log(matches); // Array aller Ziffernvorkommen

[
  '2', '5', '3', '0'
]
  • [^0-9] – findet jedes Zeichen, das nicht zwischen den Klammern ist (keine Ziffer)

Beispiel:

const str = "The price is $25.";
const regex = /[^0-9]/g; // Findet jedes Zeichen, das keine Ziffer ist
const matches = str.match(regex);

console.log(matches); // Array aller Vorkommen von Nicht-Ziffern

[
  'T', 'h', 'e', ' ',
  'p', 'r', 'i', 'c',
  'e', ' ', 'i', 's',
  ' ', '$', '.'
]

*(x|y)– findet eines der Alternativen, getrennt durch ein |

Beispiel:

const str = "The words 'xylophone' and 'yellow' contain the letters 'x' and 'y'.";
const regex = /(x|y)/g; // Findet entweder 'x' oder 'y'
const matches = str.match(regex);

console.log(matches); // Array aller Vorkommen von 'x' oder 'y'

[
  'x', 'y', 'y', 'x', 'x', 'y'
]

Metazeichen sind Sonderzeichen, die in regulären Ausdrücken eine besondere Bedeutung haben. Hier eine Übersicht:

Metazeichen Beschreibung
. Entspricht einem beliebigen Zeichen außer Zeilenumbruch oder Begrenzer
\w Entspricht einem Wortzeichen (alphanumerisch: [a-zA-Z0–9_])
\W Entspricht einem Nicht-Wortzeichen (wie [^a-zA-Z0–9_])
\d Entspricht einer Ziffer (wie [0-9])
\D Entspricht einem Nicht-Ziffernzeichen
\s Entspricht einem Leerzeichen (z. B. Space, Tab)
\S Entspricht einem Nicht-Leerzeichen
\b Entspricht dem Anfang oder Ende eines Wortes
\B Entspricht nicht dem Anfang oder Ende eines Wortes
\0 Entspricht einem NULL-Zeichen
\n Entspricht einem Zeilenumbruch
\f Entspricht einem Form-Feed-Zeichen
\r Entspricht einem Wagenrücklauf
\t Entspricht einem Tabulator
\v Entspricht einem vertikalen Tabulator
\xxx Entspricht einem Zeichen im Oktal-Format xxx
\xdd Entspricht einem Zeichen im Hexadezimal-Format dd
\udddd Entspricht einem Unicode-Zeichen im Hexadezimalformat dddd

Eigenschaften und Methoden, die von RegEx unterstützt werden:

Name Beschreibung
constructor Gibt die Funktion zurück, die den RegExp-Prototyp erstellt hat
exec() Testet einen Treffer und gibt den ersten zurück (sonst null)
global Prüft, ob das g-Modifikator gesetzt ist
ignoreCase Prüft, ob das i-Modifikator gesetzt ist
lastIndex Gibt den Index an, ab dem die nächste Suche beginnt
multiline Prüft, ob das m-Modifikator gesetzt ist
source Gibt den ursprünglichen Text des Musters zurück
test() Testet, ob ein Treffer existiert, und gibt true oder false zurück
toString() Gibt das Muster als Zeichenkette zurück

Eine compile() Methode zum Kompilieren eines regulären Ausdrucks ist veraltet. Sie war früher nützlich, um bestehende RegEx-Objekte neu zu konfigurieren, ist aber heute durch direktes Neuerstellen überflüssig.

Ein häufiges Beispiel für reguläre Ausdrücke

let text = "The best things in life are free";
let result = /e/.exec(text); // sucht nach einem "e" in einem String
console.log(result); // Ausgabe: ["e", 2, "The best things in life ar...]


let helloWorldText = "Hello world!";
// Suche nach "Hello"
let pattern1 = /Hello/g;
let result1 = pattern1.test(helloWorldText);
// result1: true

let pattern1String = pattern1.toString();
// pattern1String : '/Hello/g'

Ein Praxisbeispiel: PLZ-Prüfung mit RegEx

const handleSubmit = (e) => {
  // Verhindert das automatische Absenden des Formulars
  e.preventDefault(); 

  // Definiert eine Liste gültiger Postleitzahlen
  const validPincodes = [
    110001, 110002, 110003, 110004, 110005, 110006, 110007, 110008, 110009,
    110010, 110011, 110012, 110013, 110014, 110015, 110016, 110017, 110018,
    110019, 110020, 110021, 110022, 110023, 110050, 110051, 110056, 110048,
    110057, 110058, 110059, 110060, 110061, 110062, 110063, 110064
  ];

  // Umwandlung der Postleitzahlen in Zeichenketten
  const validPincodeStrings = validPincodes.map((pincode) => String(pincode));

  // Erzeugt ein RegEx-Muster, das nur gültige PLZ zulässt
  const regexPattern = new RegExp(`^(${validPincodeStrings.join("|")})$`);

  // Bekommt die PLZ vom Eingabefeld
  const submittedPincode = pincode; // 'pincode' muss irgendwo definiert sein

  // Prüfung, ob die eingegebne PLZ ein gültiges Eingabemuster ist
  if (regexPattern.test(submittedPincode)) {
    // Erfolgsmeldung anzeigen
    // ...
  } else if (submittedPincode === "") {
    // Fehlermeldung bei leerer Eingabe
    // ...
  } else if (submittedPincode.length < 6) {
    // Fehlermeldung bei falscher Eingabelänge
    // ...
  }
}

results matching ""

    No results matching ""