Переклад не закінчено. Будь ласка, допоможіть перекласти цю статтю з англійської.
Метод 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] = рижа |
|
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!'
Specifications
Specification | Status | Comment |
---|---|---|
ECMAScript 3rd Edition (ECMA-262) | Standard | Initial definition. Implemented in 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 2017 Draft (ECMA-262) The definition of 'RegExp.exec' in that specification. |
Draft |
Browser compatibility
Feature | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|
Basic support | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) |
Feature | Android | Chrome for Android | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile |
---|---|---|---|---|---|---|
Basic support | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) |
See also
- Regular Expressions chapter in the JavaScript Guide
RegExp