Signatur
Beschreibung
Mit einem Modifier (auch „Pattern Modifier“ oder „Inline-Flags“) gelten die Flags eines regulären Ausdrucks nicht mehr zwingend für das ganze Muster. Die Schreibweise (?i:…) schaltet ein Flag nur innerhalb der Gruppe ein, (?-i:…) schaltet es dort aus. Beides lässt sich kombinieren, etwa (?i-s:…). Außerhalb der Gruppe gelten weiter die Flags des gesamten Ausdrucks, zum Beispiel /…/i.
Erlaubt sind nur drei Flags:
i– Groß- und Kleinschreibung ignorierenm– mehrzeilig:^und$passen an Zeilengrenzens– dotAll:.passt auch auf Zeilenumbrüche
Die Flags g, y, d, u und v betreffen den ganzen Ausdruck oder dessen Auswertung. Sie lassen sich deshalb nicht per Modifier ändern.
Wie (?:…) ist eine Modifier-Gruppe eine nicht-erfassende Gruppe: Sie erzeugt keinen Eintrag im Treffer-Array. Das ist praktisch, wenn man Muster aus mehreren Quellen zusammensetzt, von denen nur einige z. B. ohne Beachtung der Groß- und Kleinschreibung prüfen sollen. Früher musste man sich mit Umwegen wie [Hh][Ee][Ll][Ll][Oo] behelfen.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $flags (vor dem Minus) | string (Kombination aus i, m, s) | Flags, die innerhalb der Gruppe eingeschaltet werden, z. B. i in (?i:…). |
|
| $-flags (nach dem Minus) | string (Kombination aus i, m, s) | Flags, die innerhalb der Gruppe ausgeschaltet werden, z. B. -i in (?-i:…). Vor oder nach dem Minus muss mindestens ein Flag stehen. |
|
| $muster Pflicht | RegExp-Teilmuster | Das Teilmuster, für das die geänderten Flags gelten. Es darf weitere Gruppen enthalten, auch verschachtelte Modifier. |
Rückgabewert
muster unter den geänderten Flags und legt keine Erfassungsgruppe an.Beispiele
Nur ein Wort ohne Beachtung der Groß- und Kleinschreibung
const re = /(?i:hallo) Welt/;
console.log(re.test('HALLO Welt')); // i gilt nur für "hallo"
console.log(re.test('hallo welt')); // "Welt" wird exakt geprüft
Flag für einen Teil ausschalten
// Der Header-Name ist egal geschrieben, der Wert muss exakt "JSON" lauten
const re = /^content-type: (?-i:JSON)$/i;
console.log(re.test('Content-Type: JSON'));
console.log(re.test('CONTENT-TYPE: json'));
dotAll nur für einen Block (s-Flag)
const text = `BEGIN
Zeile 1
Zeile 2
END`;
// Nur innerhalb der Gruppe passt der Punkt auch auf Zeilenumbrüche
const re = /BEGIN(?s:(.*))END/;
const [, inhalt] = text.match(re);
console.log(JSON.stringify(inhalt));
Unterstützung prüfen
const unterstuetztModifier = (() => {
try {
new RegExp('(?i:a)');
return true;
} catch {
return false; // ältere Engines werfen einen SyntaxError
}
})();
const re = unterstuetztModifier
? new RegExp('(?i:id)-[0-9]+')
: /[iI][dD]-[0-9]+/;
console.log(re.test('ID-42'));
// Wichtig · Fallstricke
- Kompatibilität: Modifier sind neu (ES2025). Ältere Browser und Node.js-Versionen melden einen
SyntaxError, und zwar schon beim Parsen eines Regex-Literals. Das Skript läuft dann gar nicht erst. Wenn ältere Umgebungen wichtig sind, baue den Ausdruck mitnew RegExp()und prüfe die Unterstützung vorher, wie im Beispiel oben. - Nur i, m, s: Etwa
(?g:…)oder(?u:…)ist ein Syntaxfehler. - Diese Formen sind ungültig:
(?-:…)ohne Flag, ein doppeltes Flag wie(?ii:…)und dasselbe Flag auf beiden Seiten wie(?i-i:…). - Keine Erfassungsgruppe: Wenn du den Treffer brauchst, lege eine eigene Gruppe hinein, z. B.
(?i:(abc))oder(?i:(?<name>abc)). - Nur innerhalb der Gruppe: Anders als in manchen anderen Regex-Varianten, z. B. PCRE mit
(?i), gibt es in JavaScript keine Inline-Flags, die bis zum Ende des Musters gelten. Die Doppelpunkt-Form mit Klammern ist Pflicht. RegExp.prototype.flagsundignoreCaseusw. zeigen nur die Flags des gesamten Ausdrucks, nicht die der Modifier.