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
flags1Optional-
Ein String von zu aktivierenden Flags. Kann jede Kombination von
i,mundsenthalten. flags2Optional-
Ein String von zu deaktivierenden Flags. Kann jede Kombination von
i,mundsenthalten, darf jedoch keine Flags enthalten, die inflags1enthalten 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
iFlag macht den RegEx case-insensitive, indem alle Literalzeichen und Zeichenklassen implizit kleingeschrieben werden. - Das
mFlag ä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
sFlag ä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
gundyFlags bestimmen, wie mehrfaches Aufrufen vonexec()funktioniert und beeinflussen das Matching-Verhalten des gesamten RegEx. - Das
dFlag aktiviert zusätzliche Informationen imexec()Ergebnis und beeinflusst das Matching-Verhalten des gesamten RegEx. - Die
uundvFlags ä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 derlastIndexvorwä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