# Квантификаторы +, *, ? и {n} Рассмотрим ту же задачу, что и ранее -- взять телефон вида `+7(903)-123-45-67` и найти все числа в нём. Но теперь нас интересуют не цифры по отдельности, а именно числа, то есть результат вида `7, 903, 123, 45, 67`. Для поиска цифр по отдельности нам было достаточно класса `\d`. Но здесь нужно искать *числа* -- последовательности из 1 или более цифр. ## Количество {n} Количество повторений символа можно указать с помощью числа в фигурных скобках: `{n}`. Такое указание называют *квантификатором* (от англ. quantifier). У него есть несколько подформ записи:
\d{5}
обозначает ровно 5 цифр, в точности как \d\d\d\d\d
.
Следующий пример находит пятизначное число.
```js
//+ run
alert( "Мне 12345 лет".match(/\d{5}/) ); // "12345"
```
\d{3,5}
```js
//+ run
alert( "Мне не 12, а 1234 года".match(/\d{3,5}/) ); // "1234"
```
Последнее значение можно и не указывать. Тогда выражение \d{3,}
найдет числа, длиной от трех цифр:
```js
//+ run
alert( "Мне не 12, а 345678 лет".match(/\d{3,5}/) ); // "345678"
```
\d{1,}
:
```js
//+ run
var str = "+7(903)-123-45-67";
alert( str.match(/\d{1,}/g) ); // 7,903,123,45,67
```
## Короткие обозначения
Для самые часто востребованных квантификаторов есть специальные короткие обозначения.
\d+
находит числа -- последовательности из 1 или более цифр:
```js
//+ run
var str = "+7(903)-123-45-67";
alert( str.match(/\d+/g) ); // 7,903,123,45,67
```
ou?r
найдёт o
, после которого, возможно, следует u
, а затем r
.
Этот регэксп найдёт or
в слове color
и our
в colour
:
```js
//+ run
var str = "Можно писать color или colour (британский вариант)";
alert( str.match(/colou?r/g) ); // color, colour
```
\d+\.\d+
`: /<[a-z]+>/i
'<'
, за которым идут одна или более букв английского алфавита, и затем '>'
.
/<[a-z][a-z0-9]*>/i
/<\/?[a-z][a-z0-9]*>/i
/?
перед тегом. Его понадобилось заэкранировать, чтобы JavaScript не принял его за конец шаблона.
```js
//+ run
alert( "<\w+>
.
Так как класс `\w` означает "любая цифра или английская буква или `'_'`, то под такой регэксп подойдут и не теги, например <_>
. Однако он гораздо проще, чем более точный регэксп <[a-z][a-z0-9]*>
.
Подойдёт ли нам <\w+>
или нужно использовать именно <[a-z][a-z0-9]*>
?
В реальной жизни допустимы оба варианта. Ответ на подобные вопросы зависит от того, насколько реально важна точность и насколько сложно потом будет отфильтровать лишние совпадения (если появятся).
[/smart]