Modifikator: (?ims-ims:...)
Ein Modifikator überschreibt die Flaggen-Einstellungen in einem bestimmten Teil eines regulären Ausdrucks. Es kann verwendet werden, um Flaggen zu aktivieren oder zu deaktivieren, welche die Bedeutungen bestimmter Regex-Syntaxelemente ändern. Diese Flaggen sind i
, m
und s
.
Syntax
(?flags1:pattern)
(?flags1-flags2:pattern)
Hinweis: JavaScript hat nur die "begrenzte" Modifikatorform, bei der das Muster innerhalb der Modifikatorgruppe platziert wird. Die meisten anderen Sprachen, die Modifikatoren unterstützen, haben eine "unbegrenzte" Form, bei der der Modifikator bis zum Ende der nächsten enthaltenen Gruppe angewendet wird.
Parameter
flags1
Optional-
Eine Zeichenkette von Flaggen, die aktiviert werden sollen. Kann jede Kombination von
i
,m
unds
enthalten. flags2
Optional-
Eine Zeichenkette von Flaggen, die deaktiviert werden sollen. Kann jede Kombination von
i
,m
unds
enthalten, darf aber keine Flaggen enthalten, die inflags1
enthalten sind. pattern
-
Ein Muster, das alles enthalten kann, was Sie in einem Regex-Literal verwenden können, einschließlich eines Disjunktionsmusters.
Beschreibung
Einige Flaggen ändern die Bedeutungen von Regex-Syntaxelementen:
- Die
i
-Flagge macht die Regex-Groß-/Kleinschreibung unempfindlich, indem alle literal characters und Zeichenklassen implizit in Kleinbuchstaben umgewandelt werden. - Die
m
-Flagge ändert das Verhalten von Eingabebegrenzungsbedingungen^
und$
, um den Anfang und das Ende jeder Zeile zusätzlich zum Anfang und Ende der Eingabezeichenfolge zu entsprechen. - Die
s
-Flagge ändert das Verhalten des Wildcard-.
-Zeichens, um jedem Zeichen zu entsprechen, einschließlich Zeilenumbruchszeichen.
Manchmal möchten Sie, dass diese Änderungen nur in einem bestimmten Teil eines Regex-Musters wirksam sind. Sie können dies tun, indem Sie diesen Teil in einem Modifikator umschließen. Zum Beispiel:
/(?i:Hello) world/;
In dieser Regex ist die i
-Flagge nur für den Hello
-Teil des Musters aktiviert. Der world
-Teil ist groß-/kleinheitssensitiv. Daher entspricht es Hello world
, hello world
und HELLO world
, aber nicht HELLO WORLD
. Das folgende Beispiel ist äquivalent, indem die i
-Flagge global aktiviert wird und dann für den world
-Teil deaktiviert wird:
/Hello (?-i:world)/i;
Die flags1
- und flags2
-Parameter können jede Kombination von i
, m
und s
enthalten. Allerdings müssen die Flaggen eindeutig zwischen flags1
und flags2
sein — Sie können eine Flagge nicht zweimal aktivieren oder deaktivieren oder eine Flagge aktivieren und dann sofort deaktivieren.
Die flags1
- und flags2
-Parameter sind optional, aber mindestens einer muss nicht leer sein. (?flags1-:pattern)
ist ein Modifikator, der nur Flaggen aktiviert (entspricht (?flags1:pattern)
). (?-flags2:pattern)
ist ein Modifikator, der nur Flaggen deaktiviert. (?:pattern)
ist lediglich eine nicht erfassende Gruppe, und (?-:pattern)
ist ein Syntaxfehler.
Andere Flaggen sind in einem Modifikator nicht sinnvoll und erzeugen daher Syntaxfehler, wenn sie enthalten sind:
- Die
g
undy
-Flaggen bestimmen, wie mehrere Aufrufe vonexec()
ablaufen und beeinflussen das Übereinstimmungsverhalten der gesamten Regex. - Die
d
-Flagge aktiviert zusätzliche Informationen imexec()
-Ergebnis und beeinflusst das Übereinstimmungsverhalten der gesamten Regex. - Die
u
undv
-Flaggen ändern das Verhalten der Regex-Engine auf eine Weise, die zu komplex ist, um lokal modifiziert zu werden. Sie haben auch globale Auswirkungen auf die Regex, wie zum Beispiel, wie derlastIndex
fortgeschritten wird.
Beispiele
Ein mehrzeiliges Format nur am Anfang der Zeichenfolge abgleichen
Die folgende Regex definiert ein Format für eine mehrzeilige Zeichenkette. Das erste ^
repräsentiert den Anfang der gesamten Eingabezeichenfolge, da es sich innerhalb eines (?-m:)
-Modifikators befindet, während alle anderen ^
-Zeichen den Anfang einer Zeile darstellen:
const pattern = /(?-m:^)---\n^title:.*^slug:.*^---/ms;
const input = `---
title: "Modifier: (?ims-ims:...)"
slug: Web/JavaScript/Reference/Regular_expressions/Modifier
---`;
pattern.test(input); // true
// Extra line break at the start of string
const input2 = `\n${input}`;
pattern.test(input2); // false
Bestimmte Wörter groß-/kleinheitsunempfindlich abgleichen
Stellen Sie sich vor, Sie suchen alle Variablendeklarationen, die foo
oder bar
heißen (weil es schlechte Namen sind). Das Wort kann in beliebiger Groß-/Kleinschreibung erscheinen, aber Sie wissen, dass das Schlüsselwort immer klein geschrieben ist, also können Sie dies tun:
const pattern = /(?:var|let|const) (?i:foo|bar)\b/i;
pattern.test("let foo;"); // true
pattern.test("const BAR = 1;"); // true
pattern.test("Let foo be a number"); // false
Spezifikationen
Specification |
---|
Unknown specification # syntax |
Browser-Kompatibilität
BCD tables only load in the browser