String.prototype.match()
Baseline Широко доступно
Эта функция хорошо зарекомендовала себя и работает на многих устройствах и версиях браузеров. Она доступна во всех браузерах с июля 2015 года.
Метод match() объектов String извлекает результат сопоставления этой строки с регулярным выражением.
Попробуйте
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"]
Синтаксис
match(regexp)
Параметры
-
regexp -
Объект регулярного выражения или любой объект, имеющий метод
Symbol.match.Если
regexpне является объектомRegExpи не имеет методаSymbol.match, он неявно преобразуется вRegExpс помощьюnew RegExp(regexp).Если вы не передадите никакого параметра и будете использовать метод
match()напрямую, вы получитеArrayс пустой строкой:[""], так как это эквивалентноmatch(/(?:)/).
Возвращаемое значение
Array, содержимое которого зависит от наличия или отсутствия глобального (g) флага, или null, если совпадений не найдено.
- Если используется флаг
g, возвращаются все совпадения с полным регулярным выражением, но без захватывающих групп. - Если флаг
gне используется, возвращается только первое полное совпадение и связанные с ним захватывающие группы. В этом случаеmatch()вернет тот же результат, что иRegExp.prototype.exec()(массив с некоторыми дополнительными свойствами).
Описание
Реализация String.prototype.match сводится к вызову метода Symbol.match аргумента, передавая строку в качестве первого параметра. Фактическая реализация находится в RegExp.prototype[Symbol.match]().
- Если вам нужно узнать, соответствует ли строка регулярному выражению
RegExp, используйтеRegExp.prototype.test(). - Если вам нужно только первое найденное совпадение, возможно, вместо этого стоит использовать
RegExp.prototype.exec(). - Если вы хотите получить захватывающие группы, а глобальный флаг установлен, вместо этого вам нужно использовать
RegExp.prototype.exec()илиString.prototype.matchAll().
Для получения дополнительной информации о семантике match() при передаче регулярного выражения см. RegExp.prototype[Symbol.match]().
Примеры
Использование match()
В следующем примере match() используется для поиска "Chapter", за которым следует одна или несколько цифр, точка и затем ноль или более цифр.
Регулярное выражение включает флаг i, чтобы игнорировать различия в верхнем и нижнем регистре.
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 // ]
В приведенном выше результате сопоставления 'see Chapter 3.4.5.1' — это полное совпадение. 'Chapter 3.4.5.1' было захвачено (chapter \d+(\.\d)*). '.1' было последним значением, захваченным (\.\d). Свойство index (22) — это нулевой индекс полного совпадения. Свойство input — это исходная строка, которая была проанализирована.
Использование флагов global и ignoreCase с match()
Следующий пример демонстрирует использование флага global и ignore-case с match(). Возвращаются все буквы A-E и a-e, каждая в отдельном элементе массива.
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']
Примечание: См. также String.prototype.matchAll() и Расширенный поиск с флагами.
Использование именованных захватывающих групп
В браузерах, поддерживающих именованные захватывающие группы, следующий код захватывает "fox" или "cat" в группу с именем 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() без параметра
const str = "Nothing will come of nothing."; str.match(); // returns [""]
Использование match() с объектом, реализующим [Symbol.match](), но не являющимся RegExp
Если объект имеет метод Symbol.match, он может быть использован как пользовательский сопоставитель. Возвращаемое значение Symbol.match становится возвращаемым значением match().
const str = "Hmm, this is interesting.";
str.match({
[Symbol.match](str) {
return ["Yes, it's interesting."];
},
}); // returns ["Yes, it's interesting."]
Не-RegExp в качестве параметра
Когда параметр regexp является строкой или числом, он неявно преобразуется в RegExp с помощью new RegExp(regexp).
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"]
Это может привести к неожиданным результатам, если специальные символы не экранированы должным образом.
console.log("123".match("1.3")); // [ "123" ]
Это совпадение, потому что . в регулярном выражении соответствует любому символу. Чтобы сопоставить только конкретный символ точки, вам нужно экранировать ввод.
console.log("123".match("1\\.3")); // null
Спецификации
Совместимость с браузерами
| Настольные компьютеры | Мобильные устройства | Сервер | |||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox for Android | Opera Android | Safari on iOS | Samsung Internet | WebView Android | WebView on iOS | Bun | Deno | Node.js | |
match |
1 |
12 |
1 |
4 |
1 |
18 |
4 |
10.1 |
1 |
1.0 |
4.4 |
1 |
1.0.0 |
1.0 |
0.10.0 |
См. также
- Polyfill для
String.prototype.matchвcore-jsс исправлениями и реализацией современного поведения, такого как поддержкаSymbol.match - Руководство по регулярным выражениям
String.prototype.matchAll()RegExpRegExp.prototype.exec()RegExp.prototype.test()
© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/match