RegExp.prototype.exec()
=======================

Сводка
------

Метод **`exec()`** выполняет поиск сопоставления регулярного выражения в указанной строке. Возвращает массив с результатами или `null`.

Если целью выполнения является просто определить, проходит оно или нет, используйте метод `RegExp.prototype.test()`, либо метод строки `String.prototype.search()`.

Синтаксис
---------
```

regexObj.exec(str)
```

### Параметры

`str`

Строка, с которой производится сопоставление регулярного выражения.

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

Если сопоставление успешно выполнилось, метод `exec()` возвращает массив и обновляет свойства объекта регулярного выражения. Возвращаемый массив в первом элементе содержит сопоставленный текст, а в последующих элементах — текст, захваченный при сопоставлении круглыми скобками.

Если сопоставление не удалось, метод `exec()` возвращает `null`.

Описание
--------

Рассмотрим следующий пример:


```js
// Сопоставляется с фразой «кайф, сплющь», за которой следует слово «вши»,
// игнорируя любые символы между ними. Запоминает слова «сплющь» и «вши».
// Игнорирует регистр символов.
var re = /кайф,\s(сплющь).+?(вши)/gi;
var result = re.exec("Эх, чужд кайф, сплющь объём вши, грызя цент.");
```


Таблица ниже показывает результаты выполнения данного примера:

|  |  |  |  |
| --- | --- | --- | --- |
| Объект | Свойство/Индекс | Описание | Пример |
| `result` | `[0]` | Все сопоставившиеся символы в строке. | `кайф, сплющь объём вши` |
| `[1], ...[*n*]` | 
 Сопоставившиеся подстроки в круглых скобках, если они присутствуют.
 Количество возможных подстрок ничем не ограничено.
  | `[1] = сплющь[2] = вши` |
| `index` | Индекс сопоставления в строке, начинается с нуля. | `9` |
| `input` | Оригинальная строка. | `Эх, чужд кайф, сплющь объём вши, грызя цент.` |
| `re` | `lastIndex` | 
 Индекс, с которого начнётся следующая попытка сопоставления. Если
 отсутствует флаг `"g"`, остаётся равным нулю.
  | `31` |
| `ignoreCase` | 
 Указывает, что в регулярном выражении используется флаг игнорирования
 регистра `"i"`.
  | `true` |
| `global` | 
 Указывает, что в регулярном выражении используется флаг глобального
 сопоставления `"g"`.
  | `true` |
| `multiline` | 
 Указывает, что в регулярном выражении используется флаг сопоставления по
 нескольким строкам `"m"`.
  | `false` |
| `source` | Текст шаблона регулярного выражения. | `кайф,\s(сплющь).+?(вши)` |

Примеры
-------

### Пример: поиск последовательных сопоставлений

Если ваше регулярное выражение использует флаг `"g"`, вы можете использовать метод `exec()` несколько раз для нахождения последовательных сопоставлений в одной и той же строке. Если вы сделаете это, поиск начнётся по подстроке строки `str`, начало которой определяется свойством `lastIndex` регулярного выражения (метод `test()` также увеличивает свойство `lastIndex`). Например, предположим, что у вас есть следующий скрипт:


```js
var myRe = /аб\*/g;
var str = "аббвгдеабж";
var myArray;
while ((myArray = myRe.exec(str)) !== null) {
  var msg = "Найдено " + myArray[0] + ". ";
  msg += "Следующее сопоставление начнётся с позиции " + myRe.lastIndex;
  console.log(msg);
}
```


Этот скрипт выведет следующий текст:


```js
Найдено абб. Следующее сопоставление начнётся с позиции 3
Найдено аб. Следующее сопоставление начнётся с позиции 9
```


Примечание: не помещайте литерал регулярного выражения (или конструктор `RegExp`) внутрь условия `while`; это приведёт к бесконечному циклу, поскольку свойство `lastIndex` будет сбрасываться в ноль на каждой итерации цикла. Также убедитесь, что установлен флаг глобального сопоставления, в противном случае цикл будет бесконечным.

### Пример: использование метода `exec()` вместе с литералами регулярного выражения

Вы можете использовать метод `exec()` без создания объекта `RegExp`:


```js
var matches = /(привет \S+)/.exec("Это привет миру!");
console.log(matches[1]);
```


Скрипт выведет в журнал строку «привет миру!».

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

| Specification |
| --- |
| ECMAScript Language Specification # sec-regexp.prototype.exec |

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

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

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

* Глава про регулярные выражения в руководстве по JavaScript
* `RegExp`