Einführung in reguläre Ausdrücke in JavaScript
Reguläre Ausdrücke (regex oder regexp) sind ein leistungsstarkes Werkzeug zum Suchen, Ersetzen und Überprüfen von Zeichenketten anhand eines vorgegebenen Musters. In JavaScript (und Node.js) werden sie durch das eingebaute Objekt RegExp implementiert.
Für Anfänger mag die Regex-Syntax einschüchternd wirken, aber in Wirklichkeit ist es nur eine Sprache zur Beschreibung von Mustern. Wenn Sie die grundlegenden Konstrukte beherrschen, können Sie:
- E-Mail, Telefon, URL validieren
- Daten aus Text extrahieren (Parsing)
- Teilzeichenketten nach komplexen Regeln ersetzen
- Benutzereingaben filtern und verarbeiten
In diesem Artikel behandeln wir reguläre Ausdrücke in JavaScript mit Beispielen auf Node.js. Alle Beispiele können in der Konsole oder in einer Laufzeitumgebung ausgeführt werden.
Erstellen eines regulären Ausdrucks in JS
In JavaScript gibt es zwei Möglichkeiten, einen Regex zu erstellen:
1. Literale Syntax (empfohlen)
const pattern = /hello/; // Sucht nach dem Wort "hello"Das Muster wird zwischen zwei Schrägstriche gesetzt. Nach dem schließenden Schrägstrich können Flags angegeben werden (z.B. i für Groß-/Kleinschreibung ignorieren).
2. RegExp-Konstruktor
const pattern = new RegExp('hello'); // Entspricht /hello/Wird verwendet, wenn das Muster dynamisch ist (aus einer Variable erstellt wird).
Flags für reguläre Ausdrücke
i— Groß-/Kleinschreibung ignorieren (/hello/ifindet "Hello", "HELLO")g— globale Suche (findet alle Übereinstimmungen, nicht nur die erste)m— mehrzeiliger Modus (ändert das Verhalten der Anker^und$)s— Punkt entspricht auch dem Zeilenumbruchzeichenu— Unicode-Unterstützungy— klebrige Suche (sucht nur ab der Position lastIndex)
const regex = /javascript/gi; // Sucht global und ohne Berücksichtigung der Groß-/Kleinschreibung nach "javascript"Grundlegende Methoden für die Arbeit mit Regex in JavaScript
Betrachten wir die wichtigsten Methoden, die mit regulären Ausdrücken verwendet werden.
test() — Prüfung auf Vorhandensein eines Musters
Gibt true oder false zurück. Die schnellste Methode zur Validierung.
const emailPattern = /^[a-z0-9._%+-]+@[a-z0-9.-]+\\.[a-z]{2,}$/i;console.log(emailPattern.test('user@example.com')); // trueconsole.log(emailPattern.test('invalid-email')); // falseexec() — Suche mit Details
Gibt ein Array mit der Übereinstimmung und Gruppen zurück. Mit dem Flag g merkt es sich die Position.
const str = 'Preis: 100 Rubel, Rabatt: 20 Rubel';const pricePattern = /(\\d+)\\sRubel/g;let match;while ((match = pricePattern.exec(str)) !== null) { console.log(`Gefunden: ${match[0]}, Zahl: ${match[1]}`);}// Ausgabe:// Gefunden: 100 Rubel, Zahl: 100// Gefunden: 20 Rubel, Zahl: 20match() — Suche in einer Zeichenkette
Methode der Zeichenkette. Ohne das Flag g wird die erste Übereinstimmung zurückgegeben (wie exec). Mit dem Flag g ein Array aller Übereinstimmungen.
const text = 'JS ist JavaScript, nicht zu verwechseln mit Java.';const jsMatches = text.match(/Java\\w*/g);console.log(jsMatches); // ['JavaScript', 'Java']replace() — Ersetzung nach Muster
Ersetzt Übereinstimmungen durch eine neue Zeichenkette. Unterstützt spezielle Symbole ($1, $&).
const phone = '+7 (123) 456-78-90';const cleanPhone = phone.replace(/[\\s\\(\\)\\-]/g, '');console.log(cleanPhone); // +71234567890
// Ersetzung mit Gruppenconst date = '2024-03-15';const reversed = date.replace(/(\\d{4})-(\\d{2})-(\\d{2})/, '$3.$2.$1');console.log(reversed); // 15.03.2024search() — Index der ersten Übereinstimmung
const index = 'Hallo Welt'.search(/Welt/);console.log(index); // 6