Группу в регулярном выражении можно определить с помощью круглых скобок следующим образом:
/class-(\d*)/
Группа является подразделом образца. Группы можно использовать со следующей целью.
-
Для применения квантификатора к нескольким символам.
-
Для отделения подобразцов с целью применения при перестановках (с помощью символа
|
).
-
Для сбора совпадений подстрок (к примеру, с помощью использования
\1
в регулярных выражениях для подбора ранее сопоставленной группы или с помощью применения
$1
аналогичным образом в методе
replace()
класса String).
В следующих разделах подробно описывается использование таких групп.
Использование групп с квалификаторами
Если группа не используется, квантификатор применяется к символу или классу символов, предшествующих ему, как это показано далее:
var pattern:RegExp = /ab*/ ;
// matches the character a followed by
// zero or more occurrences of the character b
pattern = /a\d+/;
// matches the character a followed by
// one or more digits
pattern = /a[123]{1,3}/;
// matches the character a followed by
// one to three occurrences of either 1, 2, or 3
Однако можно использовать группу для применения квантификатора к нескольким символам или классам символов:
var pattern:RegExp = /(ab)*/;
// matches zero or more occurrences of the character a
// followed by the character b, such as ababab
pattern = /(a\d)+/;
// matches one or more occurrences of the character a followed by
// a digit, such as a1a5a8a3
pattern = /(spam ){1,3}/;
// matches 1 to 3 occurrences of the word spam followed by a space
Дополнительные сведения об этом см. в разделе «
Квантификаторы
».
Использование групп с символом оператора перестановок (|)
Группы можно использовать для определения групп символов, к которым требуется применить символ оператора перестановок
|
), как показано ниже:
var pattern:RegExp = /cat|dog/;
// matches cat or dog
pattern = /ca(t|d)og/;
// matches catog or cadog
Использование групп для сбора совпадений подстрок
При определении в образце стандартной группы в круглых скобках можно позднее сослаться на нее в регулярном выражении. Такой прием известен под названием
обратная ссылка
, а такие виды групп известны как
группы сбора
. Например, в следующем регулярном выражении последовательность
\1
соответствует всему, чему соответствует подстрока группы в круглых скобках:
var pattern:RegExp = /(\d+)-by-\1/;
// matches the following: 48-by-48
В регулярном выражении можно указать до 99 таких обратных ссылок, напечатав
\1
,
\2
, ... ,
\99
.
Аналогичным образом в методе
replace()
класса String можно использовать
$1$99
для вставки в замещающую цепочку собранных совпадений подстрок группы:
var pattern:RegExp = /Hi, (\w+)\./;
var str:String = "Hi, Bob.";
trace(str.replace(pattern, "$1, hello."));
// output: Bob, hello.
Также при использовании групп сбора метод
exec()
класса RegExp и метод
match()
класса String возвращают подстроки, соответствующие группам сбора:
var pattern:RegExp = /(\w+)@(\w+).(\w+)/;
var str:String = "bob@example.com";
trace(pattern.exec(str));
// bob@example.com,bob,example,com
Использование групп без сбора и групп просмотра вперед
Группой без сбора является группа, используемая только для образования групп, она не «собирает» и не совпадает с пронумерованными обратными ссылками. Используйте
(?:
и
)
для определения групп без сбора, как показано далее:
var pattern = /(?:com|org|net);
Например, обратите внимание на разницу между использованием
(com|org)
в группе сбора по сравнению с использованием в группе без сбора (метод
exec()
дает перечень групп сбора после полного совпадения):
var pattern:RegExp = /(\w+)@(\w+).(com|org)/;
var str:String = "bob@example.com";
trace(pattern.exec(str));
// bob@example.com,bob,example,com
//noncapturing:
var pattern:RegExp = /(\w+)@(\w+).(?:com|org)/;
var str:String = "bob@example.com";
trace(pattern.exec(str));
// bob@example.com,bob,example
Особым типом группы без сбора является
группа просмотра вперед
, которая бывает двух типов:
позитивная группа просмотра вперед
и
негативная группа просмотра вперед.
Используйте
(?=
и
)
для определения позитивной группы просмотра вперед, которая задает соответствие подобразца в группе определенному положению. Однако часть строки, соответствующая позитивной группе просмотра вперед, может соответствовать оставшимся образцам в регулярном выражении. Например, поскольку в следующем коде
(?=e)
является позитивной группой просмотра вперед, символ
e
, которому она соответствует, может совпадать с последующей частью регулярного выражения, в данном случае группой сбора
\w*)
:
var pattern:RegExp = /sh(?=e)(\w*)/i;
var str:String = "Shelly sells seashells by the seashore";
trace(pattern.exec(str));
// Shelly,elly
Используйте
(?!
и
)
для определения негативной группы просмотра вперед, которая задает
отсутствие
совпадения подобразца в группе определенному положению. Например:
var pattern:RegExp = /sh(?!e)(\w*)/i;
var str:String = "She sells seashells by the seashore";
trace(pattern.exec(str));
// shore,ore
Использование именованных групп
Именованная группа является типом группы в регулярном выражении, которой дан именованный идентификатор. Используйте
(?P<name>
и
)
для определения именованной группы. Например, в состав следующего регулярного выражения входит именованная группа с идентификатором под именем
digits
:
var pattern = /[a-z]+(?P<digits>\d+)[a-z]+/;
При использовании метода
exec()
добавляется совпадающая именованная группа в качестве свойства массива
result
:
var myPattern:RegExp = /([a-z]+)(?P<digits>\d+)[a-z]+/;
var str:String = "a123bcd";
var result:Array = myPattern.exec(str);
trace(result.digits); // 123
Вот другой пример, в котором используются две именованных группы с идентификаторами
name
и
dom
:
var emailPattern:RegExp =
/(?P<name>(\w|[_.\-])+)@(?P<dom>((\w|-)+))+\.\w{2,4}+/;
var address:String = "bob@example.com";
var result:Array = emailPattern.exec(address);
trace(result.name); // bob
trace(result.dom); // example
Примечание.
Именованные группы не являются частью спецификации языка ECMAScript. Они представляют собой добавленную в ActionScript 3.0 возможность.