Quantifiers

Quantoren geben die Anzahl von Zeichen oder Ausdrücken an, die übereinstimmen sollen.

Probieren Sie es aus

Typen

Hinweis: Im Folgenden bezieht sich item nicht nur auf einzelne Zeichen, sondern umfasst auch Zeichenklassen und Gruppen und Rückverweise.

Zeichen Bedeutung
x*

Passt den vorherigen Artikel "x" 0 oder mehrmals an. Zum Beispiel, /bo*/ passt "boooo" in "A ghost booooed" und "b" in "A bird warbled", aber nichts in "A goat grunted".

x+

Passt den vorherigen Artikel "x" 1 oder mehrmals an. Entspricht {1,}. Zum Beispiel, /a+/ passt das "a" in "candy" und alle "a"'s in "caaaaaaandy".

x?

Passt den vorherigen Artikel "x" 0 oder 1 Mal an. Zum Beispiel, /e?le?/ passt das "el" in "angel" und das "le" in "angle."

Wenn unmittelbar nach einem beliebigen der Quantifizierer *, +, ? oder {} verwendet, macht es den Quantifizierer nicht-gierig (das Minimum an Malen passend), im Gegensatz zur Standardeinstellung, die gierig ist (das Maximum an Malen passend).

x{n}

Wo "n" eine nicht-negative ganze Zahl ist, passt genau "n" Vorkommen des vorherigen Artikels "x". Zum Beispiel, /a{2}/ passt nicht das "a" in "candy", aber alle "a"'s in "caandy", und die ersten zwei "a"'s in "caaandy".

x{n,}

Wo "n" eine nicht-negative ganze Zahl ist, passt mindestens "n" Vorkommen des vorherigen Artikels "x". Zum Beispiel, /a{2,}/ passt nicht das "a" in "candy", passt aber alle "a"'s in "caandy" und in "caaaaaaandy".

x{n,m}

Wo "n" und "m" nicht-negative ganze Zahlen sind und m >= n, passt mindestens "n" und höchstens "m" Vorkommen des vorherigen Artikels "x". Zum Beispiel, /a{1,3}/ passt nichts in "cndy", das "a" in "candy", die zwei "a"'s in "caandy", und die ersten drei "a"'s in "caaaaaaandy". Beachten Sie, dass beim Abgleichen von "caaaaaaandy", das Übereinstimmungsergebnis "aaa" ist, auch wenn die ursprüngliche Zeichenkette mehr "a"s enthielt.

x*?
x+?
x??
x{n}?
x{n,}?
x{n,m}?

Standardmäßig sind Quantifizierer wie * und + "gierig", das bedeutet, dass sie versuchen, so viel von der Zeichenkette wie möglich zu passen. Das ?-Zeichen nach dem Quantifizierer macht den Quantifizierer "nicht-gierig": Das bedeutet, dass er aufhört, sobald er eine Übereinstimmung findet. Zum Beispiel, bei einer Zeichenkette wie "some <foo> <bar> new </bar> </foo> thing":

  • /<.*>/ wird "<foo> <bar> new </bar> </foo>" passen
  • /<.*?>/ wird "<foo>" passen

Beispiele

Wiederholtes Muster

In diesem Beispiel passen wir ein oder mehr Wortzeichen mit \w+, dann ein oder mehr Zeichen "a" mit a+, und schließlich enden wir an einer Wortgrenze mit \b.

js
const wordEndingWithAs = /\w+a+\b/;
const delicateMessage = "This is Spartaaaaaaa";

console.table(delicateMessage.match(wordEndingWithAs)); // [ "Spartaaaaaaa" ]

Zeichen zählen

In diesem Beispiel passen wir Wörter, die einen einzigen Buchstaben haben, Wörter, die zwischen 2 und 6 Buchstaben haben, und Wörter, die 13 oder mehr Buchstaben haben.

js
const singleLetterWord = /\b\w\b/g;
const notSoLongWord = /\b\w{2,6}\b/g;
const longWord = /\b\w{13,}\b/g;

const sentence = "Why do I have to learn multiplication table?";

console.table(sentence.match(singleLetterWord)); // ["I"]
console.table(sentence.match(notSoLongWord)); // [ "Why", "do", "have", "to", "learn", "table" ]
console.table(sentence.match(longWord)); // ["multiplication"]

Optionales Zeichen

In diesem Beispiel passen wir Wörter, die entweder mit "our" oder "or" enden.

js
const britishText = "He asked his neighbour a favour.";
const americanText = "He asked his neighbor a favor.";

const regexpEnding = /\w+ou?r/g;
// \w+ One or several letters
// o   followed by an "o",
// u?  optionally followed by a "u"
// r   followed by an "r"

console.table(britishText.match(regexpEnding));
// ["neighbour", "favour"]

console.table(americanText.match(regexpEnding));
// ["neighbor", "favor"]

Gierig versus nicht-gierig

In diesem Beispiel passen wir ein oder mehr Wortzeichen oder Leerzeichen mit [\w ]+ und [\w ]+?. Das erste ist gierig und das zweite ist nicht-gierig. Beachten Sie, wie das zweite aufhört, sobald es die minimalen Anforderungen erfüllt.

js
const text = "I must be getting somewhere near the center of the earth.";
const greedyRegexp = /[\w ]+/;

console.log(text.match(greedyRegexp)[0]);
// "I must be getting somewhere near the center of the earth"
// almost all of the text matches (leaves out the dot character)

const nonGreedyRegexp = /[\w ]+?/; // Notice the question mark
console.log(text.match(nonGreedyRegexp));
// "I"
// The match is the smallest one possible

Siehe auch