String.prototype.match()
Baseline
Weitgehend verfügbar
Diese Funktion ist gut etabliert und funktioniert auf vielen Geräten und in vielen Browserversionen. Sie ist seit Juli 2015 browserübergreifend verfügbar.
Die Methode match() von String-Werten ermittelt das Ergebnis eines Abgleichs dieser Zeichenfolge mit einem regulären Ausdruck.
Probieren Sie es aus
const paragraph = "The quick brown fox jumps over the lazy dog. It barked.";
const regex = /[A-Z]/g;
const found = paragraph.match(regex);
console.log(found);
// Expected output: Array ["T", "I"]
Syntax
match(regexp)
Parameter
regexp-
Ein Objekt mit einem regulären Ausdruck oder ein beliebiges Objekt mit einer
Symbol.match-Methode.Wenn
regexpkeinRegExp-Objekt ist und keineSymbol.match-Methode besitzt, wird es mitnew RegExp(regexp)implizit in einRegExpumgewandelt.Wenn Sie keinen Parameter übergeben und die Methode
match()direkt aufrufen, erhalten Sie einArraymit einer leeren Zeichenfolge:[""]. Das entsprichtmatch(/(?:)/).
Rückgabewert
Ein Array, dessen Inhalt davon abhängt, ob das globale Flag (g) gesetzt ist, oder null, wenn keine Übereinstimmung gefunden wurde.
- Wenn das Flag
ggesetzt ist, werden alle Übereinstimmungen mit dem vollständigen regulären Ausdruck zurückgegeben, jedoch ohne Capturing Groups. - Wenn das Flag
gnicht gesetzt ist, werden nur die erste vollständige Übereinstimmung und die zugehörigen Capturing Groups zurückgegeben. In diesem Fall liefertmatch()dasselbe Ergebnis wieRegExp.prototype.exec(): ein Array mit einigen zusätzlichen Eigenschaften.
Beschreibung
Die Implementierung von String.prototype.match tut im Wesentlichen nichts anderes, als die Symbol.match-Methode des Arguments aufzurufen und ihr die Zeichenfolge als ersten Parameter zu übergeben. Die eigentliche Implementierung stammt von RegExp.prototype[Symbol.match]().
- Wenn Sie prüfen möchten, ob eine Zeichenfolge mit einem regulären Ausdruck
RegExpübereinstimmt, verwenden SieRegExp.prototype.test(). - Wenn Sie nur die erste gefundene Übereinstimmung benötigen, können Sie stattdessen
RegExp.prototype.exec()verwenden. - Wenn Sie Capturing Groups erhalten möchten und das globale Flag gesetzt ist, müssen Sie stattdessen
RegExp.prototype.exec()oderString.prototype.matchAll()verwenden.
Weitere Informationen zum Verhalten von match() bei Übergabe eines regulären Ausdrucks finden Sie unter RegExp.prototype[Symbol.match]().
Beispiele
>match() verwenden
Im folgenden Beispiel wird match() verwendet, um "Chapter" zu finden, gefolgt von mindestens einem numerischen Zeichen und anschließend von einem Dezimalpunkt und einem numerischen Zeichen, wobei die Folge aus Dezimalpunkt und numerischem Zeichen beliebig oft vorkommen kann.
Der reguläre Ausdruck enthält das Flag i, sodass Unterschiede zwischen Groß- und Kleinschreibung ignoriert werden.
const str = "For more information, see Chapter 3.4.5.1";
const re = /see (chapter \d+(\.\d)*)/i;
const found = str.match(re);
console.log(found);
// [
// 'see Chapter 3.4.5.1',
// 'Chapter 3.4.5.1',
// '.1',
// index: 22,
// input: 'For more information, see Chapter 3.4.5.1',
// groups: undefined
// ]
Im obigen Ergebnis ist 'see Chapter 3.4.5.1' die vollständige Übereinstimmung. 'Chapter 3.4.5.1' wurde durch (chapter \d+(\.\d)*) erfasst. '.1' war der letzte von (\.\d) erfasste Wert. Die Eigenschaft index (22) ist der nullbasierte Index der vollständigen Übereinstimmung. Die Eigenschaft input enthält die ursprüngliche Zeichenfolge, die verarbeitet wurde.
Globale und Groß-/Kleinschreibungs-Flags mit match() verwenden
Das folgende Beispiel zeigt die Verwendung des globalen Flags und des Flags zum Ignorieren der Groß- und Kleinschreibung mit match(). Alle Buchstaben von A bis E und von a bis e werden zurückgegeben, jeweils als eigenes Element im Array.
const str = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
const regexp = /[a-e]/gi;
const matches = str.match(regexp);
console.log(matches);
// ['A', 'B', 'C', 'D', 'E', 'a', 'b', 'c', 'd', 'e']
Hinweis:
Siehe auch String.prototype.matchAll() und Erweiterte Suche mit Flags.
Benannte Capturing Groups verwenden
In Browsern, die benannte Capturing Groups unterstützen, erfasst der folgende Code "fox" oder "cat" in einer Gruppe namens animal:
const paragraph = "The quick brown fox jumps over the lazy dog. It barked.";
const capturingRegex = /(?<animal>fox|cat) jumps over/;
const found = paragraph.match(capturingRegex);
console.log(found.groups); // {animal: "fox"}
match() ohne Parameter verwenden
const str = "Nothing will come of nothing.";
str.match(); // returns [""]
match() mit einem Nicht-RegExp-Objekt verwenden, das [Symbol.match]() implementiert
Wenn ein Objekt eine Symbol.match-Methode besitzt, kann es als benutzerdefinierter Matcher verwendet werden. Der Rückgabewert von Symbol.match wird zum Rückgabewert von match().
const str = "Hmm, this is interesting.";
str.match({
[Symbol.match](str) {
return ["Yes, it's interesting."];
},
}); // returns ["Yes, it's interesting."]
Ein Nicht-RegExp-Wert als Parameter
Wenn der Parameter regexp eine Zeichenfolge oder eine Zahl ist, wird er mit new RegExp(regexp) implizit in ein RegExp umgewandelt.
const str1 =
"All numbers except NaN satisfy <= Infinity and >= -Infinity in JavaScript.";
const str2 =
"My grandfather is 65 years old and My grandmother is 63 years old.";
const str3 = "The contract was declared null and void.";
str1.match("number"); // "number" is a string. returns ["number"]
str1.match(NaN); // the type of NaN is the number. returns ["NaN"]
str1.match(Infinity); // the type of Infinity is the number. returns ["Infinity"]
str1.match(-Infinity); // returns ["-Infinity"]
str2.match(65); // returns ["65"]
str3.match(null); // returns ["null"]
Dies kann zu unerwarteten Ergebnissen führen, wenn Sonderzeichen nicht korrekt maskiert werden.
console.log("123".match("1.3")); // [ "123" ]
Hier liegt eine Übereinstimmung vor, weil . in einem regulären Ausdruck auf ein beliebiges Zeichen passt. Damit nur ein Punkt als Zeichen erkannt wird, müssen Sie die Eingabe maskieren.
console.log("123".match("1\\.3")); // null
Spezifikationen
| Spezifikation |
|---|
| ECMAScript® 2027 Language Specification> # sec-string.prototype.match> |