RegExp.prototype[Symbol.search]()
Baseline Широко доступно
Эта функция хорошо зарекомендовала себя и работает на многих устройствах и версиях браузеров. Она доступна во всех браузерах с июля 2015 года.
Метод [Symbol.search]() экземпляров RegExp определяет, как должно вести себя String.prototype.search.
Попробуйте
class RegExp1 extends RegExp {
constructor(str) {
super(str);
this.pattern = str;
}
[Symbol.search](str) {
return str.indexOf(this.pattern);
}
}
console.log("table football".search(new RegExp1("foo")));
// Expected output: 6
Синтаксис
regexp[Symbol.search](str)
Параметры
-
str -
String, который является целью поиска.
Возвращаемое значение
Индекс первого совпадения между регулярным выражением и заданной строкой, или -1, если совпадение не найдено.
Описание
Этот метод существует для настройки поведения поиска в подклассах RegExp. Он вызывается внутренне в String.prototype.search(). Например, следующие два примера возвращают один и тот же результат.
"abc".search(/a/);
/a/[Symbol.search]("abc");
[Symbol.search]() всегда вызывает метод exec() регулярного выражения ровно один раз и возвращает свойство index результата, или -1, если результат является null. Флаг g не оказывает влияния при использовании этого метода.
Этот метод не копирует регулярное выражение, в отличие от [Symbol.split]() или [Symbol.matchAll](). Однако, в отличие от [Symbol.match]() или [Symbol.replace](), он всегда устанавливает lastIndex в 0 при начале выполнения и восстанавливает его до предыдущего значения при выходе, таким образом, как правило, избегая побочных эффектов. Это означает, что он всегда возвращает первое совпадение в строке, даже когда lastIndex не равен нулю, а "липкие" (sticky) регулярные выражения всегда ищут строго в начале строки.
const re = /[abc]/g;
re.lastIndex = 2;
console.log("abc".search(re)); // 0
const re2 = /[bc]/y;
re2.lastIndex = 1;
console.log("abc".search(re2)); // -1
console.log("abc".match(re2)); // [ 'b' ]
Примеры
Прямой вызов
Этот метод можно использовать почти так же, как String.prototype.search(), за исключением другого значения this и другого порядка аргументов.
const re = /-/g; const str = "2016-01-02"; const result = re[Symbol.search](str); console.log(result); // 4
Использование [Symbol.search]() в подклассах
Подклассы RegExp могут переопределить метод [Symbol.search]() для изменения поведения.
class MyRegExp extends RegExp {
constructor(str) {
super(str);
this.pattern = str;
}
[Symbol.search](str) {
return str.indexOf(this.pattern);
}
}
const re = new MyRegExp("a+b");
const str = "ab a+b";
const result = str.search(re); // String.prototype.search calls re[Symbol.search]().
console.log(result); // 3
Спецификации
Совместимость с браузерами
| Десктоп | Мобильные | Сервер | |||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 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 | |
@@search |
50 |
13 |
49 |
37 |
10 |
50 |
49 |
37 |
10 |
5.0 |
50 |
10 |
1.0.0 |
1.0 |
6.0.0 |
См. также
- Polyfill of
RegExp.prototype[Symbol.search]incore-js String.prototype.search()RegExp.prototype[Symbol.match]()RegExp.prototype[Symbol.matchAll]()RegExp.prototype[Symbol.replace]()RegExp.prototype[Symbol.split]()RegExp.prototype.exec()RegExp.prototype.test()Symbol.search
© 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/RegExp/Symbol.search