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

regex
(?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 und s enthalten.

flags2 Optional

Eine Zeichenkette von Flaggen, die deaktiviert werden sollen. Kann jede Kombination von i, m und s enthalten, darf aber keine Flaggen enthalten, die in flags1 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:

js
/(?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:

js
/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 und y-Flaggen bestimmen, wie mehrere Aufrufe von exec() ablaufen und beeinflussen das Übereinstimmungsverhalten der gesamten Regex.
  • Die d-Flagge aktiviert zusätzliche Informationen im exec()-Ergebnis und beeinflusst das Übereinstimmungsverhalten der gesamten Regex.
  • Die u und v-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 der lastIndex 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:

js
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:

js
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

Siehe auch