Квантификаторы используются для определения повторений символов или последовательностей в образце, как показано далее.
Метасимвол квантификатора
|
Описание
|
*
(звезда)
|
Соответствует предыдущему элементу, повторяющемуся нуль или более раз.
|
+
(плюс)
|
Соответствует предыдущему элементу, повторяющемуся один или более раз.
|
?
(знак вопроса)
|
Соответствует предыдущему элементу, повторяющемуся нуль или один раз.
|
{
n
}
{
n
,}
и
{
n
,
n
}
|
Определяет числовой квантификатор или диапазон квантификатора предыдущего элемента:
/A{27}/
соответствует символу А, повторяемому 27 раз.
/A{3,}/
соответствует символу А, повторяемому 3 раза или более.
/A{3,5}/
соответствует символу А, повторяемому от 3 до 5 раз.
|
Квантификатор может применяться в отношении одиночного символа, класса символов или группы:
-
/a+/
соответствует символу
a
, повторяемому один раз или более.
-
/\d+/
соответствует одной или нескольким цифрам.
-
/[abc]+/
соответствует повторению одного или более символов, каждый из которых является либо
a
, либо
b
, либо
c
.
-
/(very, )*/
соответствует слову
very
, за которым следует запятая и пробел, повторяемый нуль раз или более.
Квантификаторы могут использоваться внутри групп в круглых скобках, имеющих применимые к ним квантификаторы. Например, следующий квантификатор соответствует строкам, таким как
word
и
word-word-word
:
/\w+(-\w+)*/
По умолчанию регулярные выражения представляют то, что известно как
поглощающее совпадение.
Любой подобразец в регулярном выражении (таком как
.*
пытается соответствовать как можно большему числу символов в строке, прежде чем переходить к следующей части регулярного выражения. Например, рассмотрим следующее регулярное выражение и строку:
var pattern:RegExp = /<p>.*<\/p>/;
str:String = "<p>Paragraph 1</p> <p>Paragraph 2</p>";
Регулярное выражение соответствует всей строке:
<p>Paragraph 1</p> <p>Paragraph 2</p>
Хотя предположим, что требуется соответствие только одной группе
<p>...</p>
. Это можно сделать следующим образом:
<p>Paragraph 1</p>
Добавьте знак вопроса (
?
после любого квантификатора, чтобы изменить его на то, что известно как
«ленивый» квантификатор
. Например, следующее регулярное выражение, использующее «ленивый» квантификатор
*?
, соответствует
<p>
, за которым следует минимально возможное число («ленивых») символов, за которыми идет
</p>
:
/<p>.*?<\/p>/
Следует держать в памяти следующие пункты, касающиеся квантификаторов.
-
Квантификаторы
{0}
и
{0,0}
не исключают из совпадения элемент.
-
Не объединяйте несколько квантификаторов, как в
/abc+*/
.
-
Символ точки (.) не соединяет строки до тех пор, пока не установлен флаг
s
(
dotall
), даже если за ним идет квантификатор
*
. Например, рассмотрим следующий код:
var str:String = "<p>Test\n";
str += "Multiline</p>";
var re:RegExp = /<p>.*<\/p>/;
trace(str.match(re)); // null;
re = /<p>.*<\/p>/s;
trace(str.match(re));
// output: <p>Test
// Multiline</p>
Дополнительные сведения см. в разделе «
Флаги и свойства
».