Symbol.match
Базовый уровень Широко доступно
Эта функция хорошо зарекомендовала себя и работает на многих устройствах и в различных версиях браузеров. Она доступна во всех браузерах с сентября 2015 года.
Статическое свойство данных Symbol.match представляет собой общеизвестный символ Symbol.match. Метод String.prototype.match() ищет этот символ в своём первом аргументе для метода, используемого для сопоставления входной строки с текущим объектом. Этот символ также используется для определения того, следует ли обрабатывать объект как регулярное выражение.
Для получения дополнительной информации см. RegExp.prototype[Symbol.match]() и String.prototype.match().
Попробуйте
const regexp = /foo/;
// console.log('/foo/'.startsWith(regexp));
// Expected output (Chrome): Error: First argument to String.prototype.startsWith must not be a regular expression
// Expected output (Firefox): Error: Invalid type: first can't be a Regular Expression
// Expected output (Safari): Error: Argument to String.prototype.startsWith cannot be a RegExp
regexp[Symbol.match] = false;
console.log("/foo/".startsWith(regexp));
// Expected output: true
console.log("/baz/".endsWith(regexp));
// Expected output: false
Значение
Общеизвестный символ Symbol.match.
Атрибуты свойства Symbol.match
| |
|---|---|
| Записываемость | нет |
| Перечислимость | нет |
| Конфигурируемость | нет |
Описание
Эта функция также используется для определения того, имеют ли объекты поведение регулярных выражений. Например, методы String.prototype.startsWith(), String.prototype.endsWith() и String.prototype.includes() проверяют, является ли их первый аргумент регулярным выражением, и если это так, то выбрасывают TypeError. Теперь, если символ match установлен в false (или ложное значение, кроме undefined), это указывает на то, что объект не предназначен для использования в качестве объекта регулярного выражения.
Примеры
Пометка RegExp как нерегулярного выражения
Следующий код вызовет TypeError:
"/bar/".startsWith(/bar/); // Throws TypeError, as /bar/ is a regular expression // and Symbol.match is not modified.
Однако, если вы установите Symbol.match в false, объект будет рассматриваться как не являющийся объектом регулярного выражения. Как следствие, методы startsWith и endsWith не вызовут TypeError.
const re = /foo/; re[Symbol.match] = false; "/foo/".startsWith(re); // true "/baz/".endsWith(re); // false
Спецификации
Совместимость с браузерами
| Desktop | Mobile | Server | |||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 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 |
50 |
79 |
40 |
37 |
10 |
50 |
40 |
37 |
10 |
5.0 |
50 |
10 |
1.0.0 |
1.0 |
6.0.0 |
См. также
- Полифил
Symbol.matchвcore-js Symbol.matchAllSymbol.replaceSymbol.searchSymbol.splitString.prototype.match()RegExp.prototype[Symbol.match]()
© 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/Symbol/match