Nicht speichernde Gruppe: (?:...)

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.

Eine nicht speichernde Gruppe fasst ein Teilmuster zusammen, sodass Sie einen Quantifizierer auf die gesamte Gruppe anwenden oder Disjunktionen darin verwenden können. Sie funktioniert wie der Gruppierungsoperator in JavaScript-Ausdrücken und speichert im Gegensatz zu speichernden Gruppen den passenden Text nicht, was die Leistung verbessert und Verwirrung vermeidet, wenn das Muster auch nützliche speichernde Gruppen enthält.

Syntax

regex
(?:pattern)

Parameter

pattern

Ein Muster, das alles enthalten kann, was Sie in einem Regex-Literal verwenden können, einschließlich einer Disjunktion.

Beispiele

Gruppierung eines Teilmusters und Anwendung eines Quantifizierers

Im folgenden Beispiel testen wir, ob ein Dateipfad mit styles.css oder styles.[a hex hash].css endet. Da der gesamte Teil \.[\da-f]+ optional ist, müssen wir ihn in ein neues Atom gruppieren, um den ? Quantifizierer darauf anzuwenden. Die Verwendung einer nicht speichernden Gruppe verbessert die Leistung, da keine zusätzlichen übereinstimmenden Informationen erstellt werden, die wir nicht benötigen.

js
function isStylesheet(path) {
  return /styles(?:\.[\da-f]+)?\.css$/.test(path);
}

isStylesheet("styles.css"); // true
isStylesheet("styles.1234.css"); // true
isStylesheet("styles.cafe.css"); // true
isStylesheet("styles.1234.min.css"); // false

Gruppierung einer Disjunktion

Eine Disjunktion hat in einem regulären Ausdruck die niedrigste Priorität. Wenn Sie eine Disjunktion als Teil eines größeren Musters verwenden möchten, müssen Sie sie gruppieren. Es wird empfohlen, eine nicht speichernde Gruppe zu verwenden, es sei denn, Sie sind auf den übereinstimmenden Text der Disjunktion angewiesen. Das folgende Beispiel erfasst Dateierweiterungen und verwendet denselben Code wie im Artikel über die Eingabebereichsprüfung:

js
function isImage(filename) {
  return /\.(?:png|jpe?g|webp|avif|gif)$/i.test(filename);
}

isImage("image.png"); // true
isImage("image.jpg"); // true
isImage("image.pdf"); // false

Vermeidung von Umbau-Hürden

Speichernde Gruppen werden aufgrund ihrer Position im Muster abgerufen. Wenn Sie eine speichernde Gruppe hinzufügen oder entfernen, müssen Sie auch die Positionen der anderen speichernden Gruppen aktualisieren, falls Sie sie durch Übereinstimmungsergebnisse oder Rückverweise abrufen. Dies kann eine Fehlerquelle sein, besonders wenn die meisten Gruppen rein syntaktische Zwecke erfüllen (zum Anwenden von Quantifizierern oder zum Gruppieren von Disjunktionen). Die Verwendung nicht speichernden Gruppen vermeidet dieses Problem und ermöglicht es, die Indizes der tatsächlichen speichernden Gruppen einfach zu verfolgen.

Zum Beispiel, nehmen wir an, wir haben eine Funktion, die das Muster title='xxx' in einem String abgleicht (Beispiel aus speichernde Gruppe). Um sicherzustellen, dass die Anführungszeichen übereinstimmen, verwenden wir einen Rückverweis, um auf das erste Anführungszeichen zu verweisen.

js
function parseTitle(metastring) {
  return metastring.match(/title=(["'])(.*?)\1/)[2];
}

parseTitle('title="foo"'); // 'foo'

Falls wir später entscheiden, name='xxx' als Alias für title= hinzuzufügen, müssen wir die Disjunktion in einer anderen Gruppe gruppieren:

js
function parseTitle(metastring) {
  // Oops — the backreference and index access are now off by one!
  return metastring.match(/(title|name)=(["'])(.*?)\1/)[2];
}

parseTitle('name="foo"'); // Cannot read properties of null (reading '2')
// Because \1 now refers to the "name" string, which isn't found at the end.

Anstatt alle Stellen zu suchen, an denen wir auf die Indizes der speichernden Gruppen verweisen, und sie einzeln zu aktualisieren, ist es besser, eine speichernde Gruppe zu vermeiden:

js
function parseTitle(metastring) {
  // Do not capture the title|name disjunction
  // because we don't use its value
  return metastring.match(/(?:title|name)=(["'])(.*?)\1/)[2];
}

parseTitle('name="foo"'); // 'foo'

Benannte speichernde Gruppen sind eine weitere Möglichkeit, Umbau-Hürden zu vermeiden. Sie ermöglichen es, dass auf speichernde Gruppen mit einem benutzerdefinierten Namen zugegriffen wird, der nicht beeinflusst wird, wenn andere speichernde Gruppen hinzugefügt oder entfernt werden.

Spezifikationen

Specification
ECMAScript® 2026 Language Specification
# prod-Atom

Browser-Kompatibilität

Siehe auch