Spec-Zone.ru › JavaScript

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

Спецификации

Спецификация
ECMAScript® 2027 Language Specification
# sec-regexp.prototype-%symbol.search%

Совместимость с браузерами

Десктоп Мобильные Сервер
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] in core-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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API