--- title: 'RegExp.prototype[@@search]()' slug: Web/JavaScript/Reference/Global_Objects/RegExp/@@search tags: - JavaScript - Prototype - Reference - RegExp - метод - регулярные выражения translation_of: Web/JavaScript/Reference/Global_Objects/RegExp/@@search ---
{{JSRef}}

Метод [@@search]() выполняет поиск совпадения между регулярным выражением this и строкой.

Синтаксис

regexp[Symbol.search](str)

Параметры

str
{{jsxref("String")}}, являющийся объектом поиска.

Возвращаемое значение

integer
В случае успеха, [@@search]() вернёт индекс первого совпадения регулярного выражения внутри строки. В противном случае, он вернёт -1.

Описание

Этот метод вызывается внутреннее в {{jsxref("String.prototype.search()")}}. Например, два следующих примера вернут один и тот же результат.

'abc'.search(/a/);

/a/[Symbol.search]('abc');

Этот метод существует для настройки поведения поиска в подклассах RegExp.

Примеры

Прямой вызов

Этот метод можно использовать почти так же, как {{jsxref("String.prototype.search()")}}, за исключением другого this и другого порядка аргументов.

var re = /-/g;
var str = '2016-01-02';
var result = re[Symbol.search](str);
console.log(result);  // 4

Используя @@search в подклассах

Подкласс {{jsxref("RegExp")}} может быть перезаписан с помощью метода [@@search]() для изменения поведения.

class MyRegExp extends RegExp {
  constructor(str) {
    super(str)
    this.pattern = str;
  }
  [Symbol.search](str) {
    return str.indexOf(this.pattern);
  }
}

var re = new MyRegExp('a+b');
var str = 'ab a+b';
var result = str.search(re); // String.prototype.search calls re[@@search].
console.log(result); // 3

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

Спецификация Статус Комментарий
{{SpecName('ES6', '#sec-regexp.prototype-@@search', 'RegExp.prototype[@@search]')}} {{Spec2('ES6')}} Изначальное определение.
{{SpecName('ESDraft', '#sec-regexp.prototype-@@search', 'RegExp.prototype[@@search]')}} {{Spec2('ESDraft')}}  

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

{{Compat("javascript.builtins.RegExp.@@search")}}

Смотрите также