--- title: RegExp.prototype.exec() slug: Web/JavaScript/Reference/Global_Objects/RegExp/exec translation_of: Web/JavaScript/Reference/Global_Objects/RegExp/exec ---
Метод exec()
виконує пошук збігів у заданому рядку. Він повертає масив або {{jsxref("null")}}.
Якщо Ви просто використовуєте регулярний вираз, щоб знайти чи є збіг чи немає використовуйте метод {{jsxref("RegExp.prototype.test()")}} або метод {{jsxref("String.prototype.search()")}}.
regexObj.exec(str)
str
Якщо збіг є, метод exec()
повертає масив і оновлює властивості об'єкту регулярного виразу. На першій позиції повернутого цим методом масиву буде підрядок який задовольняє даний регулярний вираз, на наступних позиціях запам'ятовані збіги за допомогою дужок "()"
Якщо збігів немає, метод exec()
повертає {{jsxref("null")}}.
Розглянемо наступний приклад:
// Знайти такий збіг: "Швидка руда" після чого йде // довільна кількість знаків потім слово "стрибає" // Запам'ятати "руда" і "стрибає" // Ігнорувати регістр літер (знайде і руда і РуДа) var re = /швидка\s(руда).+?(стрибає)/ig; var result = re.exec('Швидка руда лисиця стрибає через ледачого пса');
Таблиця підсумовує результати виконання скрипта:
Об'єкт | Властивість / Індекс | Пояснення | Приклад |
result |
[0] |
Рядок символів що співпали. | Швидка руда лисиця стрибає |
[1], ...[n ] |
Запам'ятовані підрядки, якщо такі є. Їхня кількість не обмежена. | [1] = руда |
|
index |
Індекс з якого починається збіг. | 0 | |
input |
Оригінальний рядок. | Швидка руда лисиця стрибає через ледачого пса |
|
re |
lastIndex |
Індекс з якого починати пошук наступного збігу. Коли прапорець "g" непоставлено, lastIndex буде залишатися 0. |
26 |
ignoreCase |
Показує чи був використаний прапорець "i " для ігнорування регістру літер. |
true |
|
global |
Показує чи був використаний прапорець "g " для глобального пошуку. |
true |
|
multiline |
Показує чи був використаний прапорець "m" для пошуку. | false |
|
source |
Сам регулярний вираз. | швидка\s(руда).+?(стрибає) |
Якщо регулярний вираз використовує прапорець "g
", Ви можете використовувати метод exec() багато разів для того, щоб знайти наступні збіги у рядку з яким працюєте.
Якщо Ви так зробите, пошук почнеться з індексу який заданий властивістю {{jsxref("RegExp.lastIndex", "lastIndex")}} ( метод {{jsxref("RegExp.prototype.test()", "test()")}} також змінює властивість {{jsxref("RegExp.lastIndex", "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
Увага: Не створюйте об'єкт (через конструктор {{jsxref("RegExp")}}) або літерал регулярного виразу в умові циклу while
оскільки це призведе до нескінченного циклу оскільки властивість {{jsxref("RegExp.lastIndex", "lastIndex")}} буде перезаписуватися кожен раз на нуль і метод exec
ніколи не поверне null. Також перевірте чи поставили прапорець "g" оскільки його відсутність також призведе до нескінченного циклу.
exec()
RegExp
літераламиВи можете використовувати метод exec()
без створення об'єкту {{jsxref("RegExp")}}:
var matches = /(hello \S+)/.exec('This is a hello world!'); console.log(matches[1]);
Це виведе в консоль повідомлення 'hello world!'
Специфікація | Статус | Примітка |
---|---|---|
{{SpecName('ES3')}} | {{Spec2('ES3')}} | Первісне значення. Реалізовано у JavaScript 1.2. |
{{SpecName('ES5.1', '#sec-15.10.6.21', 'RegExp.exec')}} | {{Spec2('ES5.1')}} | |
{{SpecName('ES6', '#sec-regexp.prototype.exec', 'RegExp.exec')}} | {{Spec2('ES6')}} | |
{{SpecName('ESDraft', '#sec-regexp.prototype.exec', 'RegExp.exec')}} | {{Spec2('ESDraft')}} |
Браузер | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|
Базова підтримка | {{CompatVersionUnknown}} | {{CompatVersionUnknown}} | {{CompatVersionUnknown}} | {{CompatVersionUnknown}} | {{CompatVersionUnknown}} |
Браузер | Android | Chrome for Android | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile |
---|---|---|---|---|---|---|
Базова підтримка | {{CompatVersionUnknown}} | {{CompatVersionUnknown}} | {{CompatVersionUnknown}} | {{CompatVersionUnknown}} | {{CompatVersionUnknown}} | {{CompatVersionUnknown}} |