[ Web Proxy ]
URL:
Viewing: https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Regular_expressions/Quantifier [Back]  [Original]

Quantor: *, +, ?, {n}, {n,}, {n,m} - JavaScript | MDN

Dieser Inhalt wurde automatisch aus dem Englischen bersetzt, und kann Fehler enthalten. Erfahre mehr ber dieses Experiment.

View in English Always switch to English

Quantor: *, +, ?, {n}, {n,}, {n,m}

Baseline Weitgehend verfgbar

Diese Funktion ist gut etabliert und funktioniert auf vielen Gerten und in vielen Browserversionen. Sie ist seit Juli 2015 browserbergreifend verfgbar.

Ein Quantor wiederholt ein Atom eine bestimmte Anzahl von Malen. Der Quantor wird nach dem Atom platziert, auf das er angewendet wird.

In diesem Artikel

Syntax

regex
// Greedy
atom?
atom*
atom+
atom{count}
atom{min,}
atom{min,max}

// Non-greedy
atom??
atom*?
atom+?
atom{count}?
atom{min,}?
atom{min,max}?

Hinweis: Das Hinzufgen von ? nach {count} ist syntaktisch korrekt, aber praktisch nutzlos. Da {count} immer genau count Mal bereinstimmt, verhlt sich atom{count}? genauso wie atom{count}.

Parameter

atom

Ein einzelnes Atom.

count

Eine nicht-negative ganze Zahl. Die Anzahl der Male, die das Atom wiederholt werden soll.

min

Eine nicht-negative ganze Zahl. Die minimale Anzahl der Wiederholungen des Atoms.

max Optional

Eine nicht-negative ganze Zahl. Die maximale Anzahl der Wiederholungen des Atoms. Wenn sie weggelassen wird, kann das Atom so oft wie ntig wiederholt werden.

Beschreibung

Ein Quantor wird nach einem Atom platziert, um es eine bestimmte Anzahl von Malen zu wiederholen. Er kann nicht alleine erscheinen. Jeder Quantor kann eine minimale und maximale Anzahl von Wiederholungen angeben, die ein Muster haben muss.

Quantor Minimum Maximum
? 0 1
* 0 Unendlich
+ 1 Unendlich
{count} count count
{min,} min Unendlich
{min,max} min max

Bei den Syntaxen {count}, {min,} und {min,max} drfen keine Leerzeichen um die Zahlen vorhanden sein andernfalls wird es zu einem Literal- Muster.

js
const re = /a{1, 3}/;
re.test("aa"); // false
re.test("a{1, 3}"); // true

Dieses Verhalten ist im Unicode-bewussten Modus behoben, in dem Klammern nicht wrtlich ohne Escape erscheinen knnen. Die Fhigkeit, { und } wrtlich ohne Escape zu verwenden, ist eine veraltete Syntax fr die Web-Kompatibilitt, und Sie sollten sich nicht darauf verlassen.

js
/a{1, 3}/u; // SyntaxError: Invalid regular expression: Incomplete quantifier

Es tritt ein Syntaxfehler auf, wenn das Minimum grer als das Maximum ist.

js
/a{3,2}/; // SyntaxError: Invalid regular expression: numbers out of order in {} quantifier

Quantoren knnen dazu fhren, dass erfassende Gruppen mehrmals bereinstimmen. Siehe die Seite ber die erfassenden Gruppen fr weitere Informationen zum Verhalten in diesem Fall.

Jedes wiederholte bereinstimmen muss nicht der gleiche String sein.

js
/[ab]*/.exec("aba"); // ['aba']

Quantoren sind standardmig gierig, was bedeutet, dass sie versuchen, so oft wie mglich zu arbeiten, bis das Maximum erreicht ist oder bis es nicht mehr mglich ist, weiter abzugleichen. Sie knnen einen Quantor nicht-gierig machen, indem Sie ein ? dahinter hinzufgen. In diesem Fall wird der Quantor versuchen, so wenig wie mglich zu arbeiten, und nur dann fter bereinstimmen, wenn es unmglich ist, den Rest des Musters mit dieser Anzahl von Wiederholungen abzugleichen.

js
/a*/.exec("aaa"); // ['aaa']; the entire input is consumed
/a*?/.exec("aaa"); // ['']; it's possible to consume no characters and still match successfully
/^a*?$/.exec("aaa"); // ['aaa']; it's not possible to consume fewer characters and still match successfully

Jedoch, sobald der Regex den String an einem Index erfolgreich bereinstimmt, wird er nicht versuchen, nachfolgende Indizes zu prfen, obwohl dies mglicherweise zu weniger konsumierten Zeichen fhrt.

js
/a*?$/.exec("aaa"); // ['aaa']; the match already succeeds at the first character, so the regex never attempts to start matching at the second character

Gierige Quantoren knnen weniger Wiederholungen versuchen, wenn es sonst unmglich ist, den Rest des Musters abzugleichen.

js
/[ab]+[abc]c/.exec("abbc"); // ['abbc']

In diesem Beispiel stimmt [ab]+ zuerst gierig mit "abb" berein, aber [abc]c kann den Rest des Musters ("c") nicht abgleichen, sodass der Quantor reduziert wird, um nur mit "ab" bereinzustimmen.

Gierige Quantoren vermeiden es, unendlich viele leere Zeichenfolgen zu bereinstimmen. Wenn die minimale Anzahl von bereinstimmungen erreicht ist und keine weiteren Zeichen von dem Atom an dieser Position konsumiert werden, hrt der Quantor auf, bereinzustimmen. Deshalb resultiert /(a*)*/.exec("b") nicht in einer Endlosschleife.

Gierige Quantoren versuchen, so oft wie mglich immer wieder zu bereinstimmen; sie maximieren nicht die Lnge des bereinstimmungstreffers. Zum Beispiel, /(aa|aabaac|ba)*/.exec("aabaac") stimmt mit "aa" und dann mit "ba" berein, anstatt mit "aabaac".

Quantoren beziehen sich auf ein einzelnes Atom. Wenn Sie ein lngeres Muster oder eine Disjunktion quantifizieren mchten, mssen Sie es gruppieren. Quantoren knnen nicht auf Assertions angewendet werden.

js
/^*/; // SyntaxError: Invalid regular expression: nothing to repeat

Im Unicode-bewussten Modus knnen Lookahead Assertions quantifiziert werden. Dies ist eine veraltete Syntax fr die Web-Kompatibilitt, und Sie sollten sich nicht darauf verlassen.

js
/(?=a)?b/.test("b"); // true; the lookahead is matched 0 time

Beispiele

HTML-Tags entfernen

Das folgende Beispiel entfernt HTML-Tags, die in spitzen Klammern eingeschlossen sind. Beachten Sie die Verwendung von ?, um zu vermeiden, dass zu viele Zeichen auf einmal konsumiert werden.

js
function stripTags(str) {
  return str.replace(/<.+?>/g, "");
}

stripTags("<p><em>lorem</em> <strong>ipsum</strong></p>"); // 'lorem ipsum'

Der gleiche Effekt kann mit einer gierigen bereinstimmung erreicht werden, jedoch ohne dass das wiederholte Muster mit > bereinstimmen darf.

js
function stripTags(str) {
  return str.replace(/<[^>]+>/g, "");
}

stripTags("<p><em>lorem</em> <strong>ipsum</strong></p>"); // 'lorem ipsum'

Warnung: Dies ist nur zur Demonstration es behandelt nicht > in Attributwerten. Verwenden Sie stattdessen einen geeigneten HTML-Filter wie die HTML Sanitizer API.

Auffinden von Markdown-Abstzen

In Markdown werden Abstze durch eine oder mehrere leere Zeilen getrennt. Das folgende Beispiel zhlt alle Abstze in einem String, indem es zwei oder mehr Zeilenumbrche abgleicht.

js
function countParagraphs(str) {
  return str.match(/(?:\r?\n){2,}/g).length + 1;
}

countParagraphs(`
Paragraph 1

Paragraph 2
Containing some line breaks, but still the same paragraph

Another paragraph
`); // 3

Warnung: Dies ist nur zur Demonstration es behandelt nicht Zeilenumbrche in Codeblcken oder anderen Markdown-Blockelementen wie berschriften. Verwenden Sie stattdessen einen geeigneten Markdown-Parser.

Spezifikationen

Spezifikation
ECMAScript 2027 LanguageSpecification
# prod-Quantifier

Browser-Kompatibilitt

Siehe auch


Web Proxy Viewer  |  New URL  |  Original Page