JavaScript. Подробное руководство, 6-е издание, стр. 144

Конструктор

<b>RegExp()</b>
принимает один или два строковых аргумента и создает новый объект
<b>RegExp</b>
. Первый аргумент конструктора - это строка, содержащая тело регулярного выражения, т. е. текст, который должен находиться между символами слэша в литерале регулярного выражения. Обратите внимание, что в строковых литералах и регулярных выражениях для обозначения управляющих последовательностей используется символ
<b>\</b>
, поэтому, передавая конструктору
<b>RegExp()</b>
регулярное выражение в виде строкового литерала, необходимо заменить каждый символ
<b>\</b>
парой символов
<b>\\</b>
. Второй аргумент
<b>RegExp()</b>
может отсутствовать. Если он указан, то определяет флаги регулярного выражения. Это должен быть один из символов
<b>g, i, m</b>
либо комбинация этих символов. Например:

// Находит все пятизначные числа в строке. Обратите внимание

// на использование в этом примере символов \\

var zipcode = new RegExp(\\d{5}, "g");

Конструктор

<b>RegExp()</b>
удобно использовать, когда регулярное выражение создается динамически и поэтому не может быть представлено с помощью синтаксиса литералов регулярных выражений. Например, чтобы найти строку, введенную, пользователем, надо создать регулярное выражение во время выполнения с помощью
<b>RegExp().</b>

10.3.1. Свойства RegExp

Каждый объект

<b>RegExp</b>
имеет пять свойств. Свойство
<b>source</b>
- строка, доступная только для чтения, содержащая текст регулярного выражения. Свойство
<b>global</b>
-логическое значение, доступное только для чтения, определяющее наличие флага
<b>g</b>
в регулярном выражении. Свойство
<b>ignoreCase</b>
- это логическое значение, доступное только для чтения, определяющее наличие флага
<b>і</b>
в регулярном выражении. Свойство
<b>multiline</b>
- это логическое значение, доступное только для чтения, определяющее наличие флага
<b>m</b>
в регулярном выражении. И последнее свойство
<b>lastlndex</b>
- это целое число, доступное для чтения и записи. Для шаблонов с флагом
<b>g</b>
это свойство содержит номер позиции в строке, с которой должен быть начат следующий поиск. Как описано ниже, оно используется методами
<b>ехес()</b>
и
<b>test().</b>

10.3.2. Методы RegExp

Объекты

<b>RegExp</b>
определяют два метода, выполняющие поиск по шаблону; они ведут себя аналогично методам класса
<b>String</b>
, описанным выше. Основной метод класса
<b>RegExp</b>
, используемый для поиска по шаблону, -
<b>ехес().</b>
Он похож на упоминавшийся метод
<b>match()</b>
класса
<b>String</b>
, за исключением того, что является методом класса
<b>RegExp</b>
, принимающим в качестве аргумента строку, а не методом класса
<b>String</b>
, принимающим аргумент
<b>RegExp</b>
. Метод
<b>ехес()</b>
выполняет регулярное выражение для указанной строки, т. е. ищет совпадение в строке. Бели совпадение не найдено, метод возвращает
<b>null</b>
. Однако если соответствие найдено, он возвращает такой же массив, как массив, возвращаемый методом
<b>match()</b>
для поиска без флага
g
. Нулевой элемент массива содержит строку, соответствующую регулярному выражению, а все последующие элементы - подстроки, соответствующие всем подвыражениям. Кроме того, свойство
<b>index</b>
содержит номер позиции символа, которым начинается соответствующий фрагмент, а свойство
<b>input</b>
ссылается на строку, в которой выполнялся поиск.

В отличие от

<b>match(),</b>
метод
<b>ехес()</b>
возвращает массив, структура которого не зависит от наличия в регулярном выражении флага
<b>g</b>
. Напомню, что при передаче глобального регулярного выражения метод
<b>match()</b>
возвращает массив найденных соответствий. А
<b>ехес()</b>
всегда возвращает одно соответствие, но предоставляет о нем полную информацию. Когда
<b>ехес()</b>
вызывается для регулярного выражения, содержащего флаг
<b>g</b>
, метод устанавливает свойство
<b>lastlndex</b>
объекта регулярного выражения равным номеру позиции символа, следующего непосредственно за найденной подстрокой. Когда метод
<b>ехес()</b>
вызывается для того же регулярного выражения второй раз, он начинает поиск с символа, позиция которого указана в свойстве
<b>lastlndex</b>
. Если
<b>ехес()</b>
не находит соответствия, свойство
<b>lastindex</b>
получает значение 0. (Вы также можете установить
<b>lastlndex</b>
в ноль в любой момент, что следует делать во всех тех случаях, когда поиск завершается до того, как будет найдено последнее соответствие в одной строке, и начинается поиск в другой строке с тем же объектом
<b>RegExp</b>
.) Это особое поведение позволяет вызывать
<b>exec()</b>
повторно для перебора всех соответствий регулярному выражению в строке. Например:

<b>var pattern = /Java/g;</b>

<b>var text = &quot;JavaScript - это более забавная штука, чем Java!&quot;;</b>

<b>var result;</b>

<b>while((result = pattern.exec(text)) != null) {</b>