Modifikator: (?ims-ims:...)
Ein Modifikator überschreibt Flags Einstellungen in einem spezifischen Teil eines regulären Ausdrucks. Er kann verwendet werden, um Flags zu aktivieren oder zu deaktivieren, die die Bedeutung bestimmter RegEx-Syntaxelemente ändern. Diese Flags 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ächstgelegenen umgebenden Gruppe gilt.
Parameter
flags1
Optional-
Ein String von zu aktivierenden Flags. Kann jede Kombination von
i
,m
unds
enthalten. flags2
Optional-
Ein String von zu deaktivierenden Flags. Kann jede Kombination von
i
,m
unds
enthalten, darf jedoch keine Flags enthalten, die inflags1
enthalten sind. pattern
-
Ein Muster, das aus allem bestehen kann, was Sie in einem RegEx-Literal verwenden dürfen, einschließlich einer Disjunktion.
Beschreibung
Einige Flags ändern die Bedeutung von RegEx-Syntaxelementen:
- Das
i
Flag macht den RegEx case-insensitive, indem alle Literalzeichen und Zeichenklassen implizit kleingeschrieben werden. - Das
m
Flag ändert das Verhalten von Eingabebegrenzungen^
und$
, sodass sie den Anfang und das Ende jeder Zeile zusätzlich zum Anfang und Ende des Eingabestrings abgleichen. - Das
s
Flag ändert das Verhalten des Wildcard Zeichens.
so, dass es mit jedem Zeichen, einschließlich Zeilenendzeichen, übereinstimmt.
Manchmal möchten Sie, dass diese Änderungen nur in einem bestimmten Teil eines RegEx-Musters wirksam werden. Dies können Sie erreichen, indem Sie diesen Teil in einen Modifikator einschließen. Zum Beispiel:
/(?i:Hello) world/;
In diesem RegEx ist das i
Flag nur für den Hello
Teil des Musters aktiviert. Der world
Teil ist case-sensitiv. Somit passt es zu Hello world
, hello world
und HELLO world
, aber nicht zu HELLO WORLD
. Dies ist gleichwertig, indem das i
Flag global aktiviert 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. Die Flags müssen jedoch einzigartig zwischen flags1
und flags2
sein – Sie können nicht ein Flag zweimal aktivieren oder deaktivieren oder ein Flag 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 Flags aktiviert (gleichwertig mit (?flags1:pattern)
). (?-flags2:pattern)
ist ein Modifikator, der nur Flags deaktiviert. (?:pattern)
ist einfach eine nicht-erfassende Gruppe, und (?-:pattern)
ist ein Syntaxfehler.
Andere Flags ergeben in einem Modifikator keinen Sinn und sind daher Syntaxfehler, wenn sie enthalten sind:
- Die
g
undy
Flags bestimmen, wie mehrfaches Aufrufen vonexec()
funktioniert und beeinflussen das Matching-Verhalten des gesamten RegEx. - Das
d
Flag aktiviert zusätzliche Informationen imexec()
Ergebnis und beeinflusst das Matching-Verhalten des gesamten RegEx. - Die
u
undv
Flags ändern das Verhalten der RegEx-Engine auf eine Weise, die zu komplex ist, um lokal verändert zu werden. Sie haben auch globale Effekte auf den RegEx, wie zum Beispiel, wie derlastIndex
vorwärts bewegt wird.
Beispiele
Ein Multiline-Format nur am Anfang des Strings abgleichen
Der folgende RegEx definiert ein Format für einen mehrzeiligen String. Das erste ^
repräsentiert den Anfang des gesamten Eingabestrings, indem 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 case-insensitiv abgleichen
Stellen Sie sich vor, Sie suchen alle Variablendeklarationen namens foo
oder bar
(weil sie schlechte Namen sind). Das Wort kann in beliebiger Groß-/Kleinschreibung erscheinen, aber Sie wissen, dass das Schlüsselwort immer kleingeschrieben ist, also können Sie dies tun:
const pattern = /(?:var|let|const) (?i:foo|bar)\b/;
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