String.prototype.match()

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.

Die match()-Methode von String-Werten ruft das Ergebnis des Abgleichs dieser Zeichenfolge mit einem regulären Ausdruck ab.

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

js
match(regexp)

Parameter

regexp

Ein reguläres Ausdrucksobjekt oder ein beliebiges Objekt, das eine Symbol.match-Methode hat.

Falls regexp kein RegExp-Objekt ist und keine Symbol.match-Methode hat, wird es implizit in ein RegExp umgewandelt durch die Verwendung von new RegExp(regexp).

Wenn Sie keinen Parameter angeben und die Methode match() direkt verwenden, erhalten Sie ein Array mit einem leeren String: [""], weil dies äquivalent zu match(/(?:)/) ist.

Rückgabewert

Ein Array, dessen Inhalt von der Anwesenheit oder Abwesenheit des globalen (g) Flags abhängt, oder null, wenn keine Übereinstimmungen gefunden werden.

  • Wenn das g-Flag verwendet wird, werden alle mit dem vollständigen regulären Ausdruck übereinstimmenden Ergebnisse zurückgegeben, aber keine eingefangenen Gruppen sind enthalten.
  • Wenn das g-Flag nicht verwendet wird, werden nur die erste vollständige Übereinstimmung und ihre zugehörigen Erfassungsgruppen zurückgegeben. In diesem Fall gibt match() dasselbe Ergebnis zurück wie RegExp.prototype.exec() (ein Array mit einigen zusätzlichen Eigenschaften).

Beschreibung

Die Implementierung von String.prototype.match macht nicht viel mehr, als die Symbol.match-Methode des Arguments mit der Zeichenfolge als ersten Parameter aufzurufen. Die eigentliche Implementierung stammt von RegExp.prototype[Symbol.match]().

Für weitere Informationen über die Semantik von match(), wenn ein Regex übergeben wird, siehe RegExp.prototype[Symbol.match]().

Beispiele

Verwendung von match()

Im folgenden Beispiel wird match() verwendet, um "Chapter" gefolgt von einem oder mehreren Ziffern gefolgt von einem Dezimalpunkt und Ziffer null- oder mehrmals zu finden.

Der reguläre Ausdruck enthält das i-Flag, sodass Unterschiede in Groß-/Kleinschreibung ignoriert werden.

js
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 Match-Ergebnis ist 'see Chapter 3.4.5.1' die gesamte Übereinstimmung. 'Chapter 3.4.5.1' wurde von (chapter \d+(\.\d)*) erfasst. '.1' war der letzte Wert, der von (\.\d) erfasst wurde. Die index-Eigenschaft (22) ist der nullbasierte Index der gesamten Übereinstimmung. Die input-Eigenschaft ist die ursprüngliche Zeichenfolge, die analysiert wurde.

Verwendung von Global- und IgnoreCase-Flags mit match()

Das folgende Beispiel demonstriert die Verwendung des globalen Flags und des Ignore-Case-Flags mit match(). Alle Buchstaben von A bis E und a bis e werden zurückgegeben, jedes als eigenes Element im Array.

js
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']

Verwendung von benannten Erfassungsgruppen

In Browsern, die benannte Erfassungsgruppen unterstützen, erfasst der folgende Code "fox" oder "cat" in einer Gruppe namens animal:

js
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"}

Verwendung von match() ohne Parameter

js
const str = "Nothing will come of nothing.";

str.match(); // returns [""]

Verwendung von match() mit einem Nicht-RegExp, das [Symbol.match]() implementiert

Wenn ein Objekt eine Symbol.match-Methode hat, kann es als benutzerdefinierter Matcher verwendet werden. Der Rückgabewert von Symbol.match wird zum Rückgabewert von match().

js
const str = "Hmm, this is interesting.";

str.match({
  [Symbol.match](str) {
    return ["Yes, it's interesting."];
  },
}); // returns ["Yes, it's interesting."]

Ein Nicht-RegExp als Parameter

Wenn der regexp-Parameter eine Zeichenfolge oder eine Zahl ist, wird er implizit in ein RegExp umgewandelt durch die Verwendung von new RegExp(regexp).

js
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 unerwartete Ergebnisse haben, wenn Sonderzeichen nicht richtig maskiert werden.

js
console.log("123".match("1.3")); // [ "123" ]

Dies ist eine Übereinstimmung, weil . in einem Regex jedes Zeichen abgleicht. Um es nur mit einem Punktzeichen abzugleichen, müssen Sie den Eingang maskieren.

js
console.log("123".match("1\\.3")); // null

Spezifikationen

Specification
ECMAScript® 2026 Language Specification
# sec-string.prototype.match

Browser-Kompatibilität

Siehe auch