MDN wants to talk to developers like you: https://qsurvey.mozilla.com/s3/8d22564490d8

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 Індекс з якого починається збіг. 0
input Оригінальний рядок. Швидка руда лисиця стрибає через ледачого пса
re lastIndex

Індекс з якого починати пошук наступного збігу. Коли прапорець "g" непоставлено, lastIndex буде залишатися 0.

26
ignoreCase Показує чи був використаний прапорець  "i" для ігнорування регістру літер. true
global Показує чи був використаний прапорець "g" для глобального пошуку. true
multiline Показує чи був використаний прапорець "m" для пошуку. false
source Сам регулярний вираз. швидка\s(руда).+?(стрибає)

Приклади

Пошук наступних збігів

Якщо регулярний вираз використовує прапорець "g", Ви можете використовувати метод exec() багато разів для того, щоб знайти наступні збіги у рядку з яким працюєте. Якщо Ви так зробите, пошук почнеться з індексу який  заданий властивістю lastIndex ( метод test() також змінює властивість lastIndex ). Для прикладу, припустимо Ви маєте такий скрипт:

var myRe = /ab*/g;
var str = 'abbcdefabh';
var myArray;
while ((myArray = myRe.exec(str)) !== null) {
  var msg = 'Знайдено ' + myArray[0] + '. ';
  msg += 'Наступний пошук почнеться з індексу ' + myRe.lastIndex;
  console.log(msg);
}

Це скрипт виведе таке:

Знайдено abb. Наступний пошук почнеться з індексу 3
Знайдено ab. Наступний пошук почнеться з індексу 9

Увага: Не створюйте об'єкт (через конструктор RegExp)  або літерал регулярного виразу в умові циклу while оскільки це призведе до нескінченного циклу оскільки властивість lastIndex буде перезаписуватися кожен раз на нуль і метод exec ніколи не поверне null. Також перевірте чи поставили прапорець "g" оскільки його відсутність також призведе до нескінченного циклу.

Використання exec() RegExp літералами

Ви можете використовувати метод exec() без створення об'єкту RegExp:

var matches = /(hello \S+)/.exec('This is a hello world!');
console.log(matches[1]);

Це виведе в консоль повідомлення 'hello world!'

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

Специфікація Статус Примітка
ECMAScript 3rd Edition (ECMA-262) Standard Первісне значення. Реалізовано  у JavaScript 1.2.
ECMAScript 5.1 (ECMA-262)
The definition of 'RegExp.exec' in that specification.
Standard  
ECMAScript 2015 (6th Edition, ECMA-262)
The definition of 'RegExp.exec' in that specification.
Standard  
ECMAScript Latest Draft (ECMA-262)
The definition of 'RegExp.exec' in that specification.
Draft  

Сумісність з браузерами

Браузер Chrome Firefox (Gecko) Internet Explorer Opera Safari
Базова підтримка (Yes) (Yes) (Yes) (Yes) (Yes)
Браузер Android Chrome for Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Базова підтримка (Yes) (Yes) (Yes) (Yes) (Yes) (Yes)

Див. також

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

 Зробили внесок у цю сторінку: muhus, bodya17
 Востаннє оновлена: muhus,