Signatur
Beschreibung
Mit new RegExp() erzeugen Sie reguläre Ausdrücke zur Laufzeit. Anders als beim Literal /muster/flags, das beim Parsen des Skripts kompiliert wird, kann das Muster hier aus Variablen, Benutzereingaben oder Konfigurationsdaten zusammengesetzt werden. Das ist der typische Anwendungsfall: dynamische Suchbegriffe, konfigurierbare Validierungen oder das Kopieren eines vorhandenen Ausdrucks mit anderen Flags.
Als pattern kann ein String oder ein vorhandenes RegExp-Objekt übergeben werden. Bei einem RegExp-Objekt wird dessen Quelltext übernommen; werden zusätzlich flags angegeben, ersetzen diese die ursprünglichen Flags (seit ES2015). Wird RegExp() ohne new aufgerufen und ist pattern bereits ein RegExp ohne neue Flags, liefert der Aufruf dasselbe Objekt zurück statt einer Kopie.
Wichtig: Da das Muster ein gewöhnlicher String ist, müssen Backslashes doppelt maskiert werden – /\d+/ entspricht new RegExp("\\d+"). Ebenso müssen Sonderzeichen aus Benutzereingaben (. * + ? ^ $ { } ( ) | [ ] \) escaped werden, wenn sie wörtlich gesucht werden sollen.
Gültige Flags sind d (Indizes), g (global), i (Groß-/Kleinschreibung ignorieren), m (mehrzeilig), s (dotAll), u (Unicode), v (Unicode-Sets) und y (sticky). Ungültige oder doppelte Flags sowie syntaktisch fehlerhafte Muster lösen einen SyntaxError aus.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $pattern Pflicht | string | RegExp | "(?:)" | Der Quelltext des regulären Ausdrucks als String (ohne umschließende Schrägstriche) oder ein vorhandenes RegExp-Objekt, dessen Muster übernommen wird. Fehlt der Wert, entsteht ein leerer Ausdruck, der auf alles passt. |
| $flags | string | Beliebige Kombination aus d, g, i, m, s, u, v, y. Bei einem RegExp als pattern ersetzen sie dessen Flags vollständig. u und v dürfen nicht kombiniert werden. |
Rückgabewert
RegExp-Objekt mit dem angegebenen Muster und den Flags; lastIndex ist auf 0 gesetzt.Beispiele
Dynamische Suche mit Benutzereingabe (sicher escaped)
// Sonderzeichen maskieren, damit sie wörtlich gesucht werden
const escapeRegExp = (str) => str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
const suchbegriff = 'c++';
const text = 'Ich lerne C++ und c++ macht Spaß.';
const re = new RegExp(escapeRegExp(suchbegriff), 'gi');
console.log(text.match(re));
console.log(re.source);
Backslashes im String doppelt maskieren
const literal = /\d{4}-\d{2}-\d{2}/;
const dynamisch = new RegExp('\\d{4}-\\d{2}-\\d{2}');
console.log(literal.source === dynamisch.source);
console.log(dynamisch.test('Termin am 2024-05-17'));
// Alternative: String.raw erspart das Verdoppeln
const mitRaw = new RegExp(String.raw`\d{4}-\d{2}-\d{2}`);
console.log(mitRaw.test('2024-05-17'));
Vorhandenen Ausdruck mit anderen Flags kopieren
const basis = /fehler/i;
const global = new RegExp(basis, 'gi');
const log = 'Fehler in Zeile 3, fehler in Zeile 9';
console.log(global.flags);
console.log(log.replaceAll(global, 'WARNUNG'));
console.log(basis === global);
Ungültige Muster abfangen
const erstelleRegex = (muster, flags = '') => {
try {
return new RegExp(muster, flags);
} catch (err) {
console.error(`${err.name}: ${err.message}`);
return null;
}
};
console.log(erstelleRegex('[a-z'));
console.log(erstelleRegex('abc', 'gg'));
console.log(erstelleRegex('^\\w+$', 'u')?.test('Hallo'));
// Wichtig · Fallstricke
- Doppelte Backslashes:
new RegExp("\d")ergibt das Musterd, da"\d"im String schon zu"d"wird. Verwenden Sie"\\d"oderString.raw. - Sicherheit (ReDoS / Injection): Benutzereingaben niemals ungeprüft als Muster verwenden. Unescapte Eingaben verändern die Bedeutung des Ausdrucks, und gezielt konstruierte Muster wie
(a+)+$können durch katastrophales Backtracking den Thread blockieren (besonders kritisch in Node.js-Servern). Eingaben escapen oder Länge/Komplexität begrenzen.RegExp.escape()ist neu (ES2025) und noch nicht überall verfügbar. - Zustand bei
g/y: Wiederverwendete Objekte merken sichlastIndex; wiederholtetest()-Aufrufe können dadurch abwechselndtrue/falseliefern. - Performance: Konstruktor nicht in engen Schleifen mit gleichem Muster aufrufen – einmal erzeugen und wiederverwenden. Für statische Muster ist das Literal vorzuziehen.
- Kompatibilität: Flag
sab ES2018,dab ES2022,vab ES2024 – in älteren Umgebungen führen sie zuSyntaxError.