RegExp.prototype.exec()

Сводка

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

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

Синтаксис

regexObj.exec(str)

Параметры

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

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

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

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

Описание

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

// Сопоставляется с фразой «кайф, сплющь», за которой следует слово «вши»,
// игнорируя любые символы между ними. Запоминает слова «сплющь» и «вши».
// Игнорирует регистр символов.
var re = /кайф,\s(сплющь).+?(вши)/ig;
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). Например, предположим, что у вас есть следующий скрипт:

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

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

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

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

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

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

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

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

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

Спецификация Статус Комментарии
ECMAScript 3-е издание. Стандарт Изначальное определение. Реализована в JavaScript 1.2.
ECMAScript 5.1 (ECMA-262)
Определение 'RegExp.exec' в этой спецификации.
Стандарт  
ECMAScript 2015 (6th Edition, ECMA-262)
Определение 'RegExp.exec' в этой спецификации.
Стандарт  

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

Возможность Chrome Firefox (Gecko) Internet Explorer Opera Safari
Базовая поддержка (Да) (Да) (Да) (Да) (Да)
Возможность Android Chrome для Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Базовая поддержка (Да) (Да) (Да) (Да) (Да) (Да)

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

Метки документа и участники

 Внесли вклад в эту страницу: Mingun
 Обновлялась последний раз: Mingun,