Квантификаторы +, *, ? и
Давайте возьмём строку вида +7(903)-123-45-67 и найдём все числа в ней. Но теперь нас интересуют не цифры по отдельности, а именно числа: 7, 903, 123, 45, 67 .
Число — это последовательность из 1 или более цифр \d . Чтобы указать количество повторений, нам нужно добавить квантификатор.
Количество
Самый простой квантификатор — это число в фигурных скобках: .
Он добавляется к символу (или символьному классу, или набору [. ] и т.д.) и указывает, сколько их нам нужно.
Можно по-разному указать количество, например:
Шаблон \d обозначает ровно 5 цифр, он эквивалентен \d\d\d\d\d .
Следующий пример находит пятизначное число:
alert( "Мне 12345 лет".match(/\d/) ); // "12345"
Мы можем добавить \b , чтобы исключить числа длиннее: \b\d\b .
Для того, чтобы найти числа от 3 до 5 цифр, мы можем указать границы в фигурных скобках: \d
alert( "Мне не 12, а 1234 года".match(/\d/) ); // "1234"
Верхнюю границу можно не указывать.
Тогда шаблон \d найдёт последовательность чисел длиной 3 и более цифр:
alert( "Мне не 12, а 345678 лет".match(/\d/) ); // "345678"
Давайте вернёмся к строке +7(903)-123-45-67 .
Число – это последовательность из одной или более цифр. Поэтому шаблон будет \d :
let str = "+7(903)-123-45-67"; let numbers = str.match(/\d/g); alert(numbers); // 7,903,123,45,67
Короткие обозначения
Для самых востребованных квантификаторов есть сокращённые формы записи:
Означает «один или более». То же самое, что и .
Например, \d+ находит числа (из одной или более цифр):
let str = "+7(903)-123-45-67"; alert( str.match(/\d+/g) ); // 7,903,123,45,67
Означает «ноль или один». То же самое, что и . По сути, делает символ необязательным.
Например, шаблон ou?r найдёт o после которого, возможно, следует u , а затем r .
Поэтому шаблон colou?r найдёт два варианта: color и colour :
let str = "Следует писать color или colour?"; alert( str.match(/colou?r/g) ); // color, colour
Означает «ноль или более». То же самое, что и . То есть символ может повторяться много раз или вообще отсутствовать.
Например, шаблон \d0* находит цифру и все нули за ней (их может быть много или ни одного):
alert( "100 10 1".match(/\d0*/g) ); // 100, 10, 1
Сравните это с + (один или более):
alert( "100 10 1".match(/\d0+/g) ); // 100, 10 // 1 не подходит, т.к 0+ требует как минимум один ноль
Ещё примеры
Квантификаторы используются очень часто. Они служат основными «строительными блоками» сложных регулярных выражений, поэтому давайте рассмотрим ещё примеры.
Регулярное выражение для десятичных дробей (чисел с плавающей точкой): \d+\.\d+
alert( "0 1 12.345 7890".match(/\d+\.\d+/g) ); // 12.345
Регулярное выражение для «открывающего HTML-тега без атрибутов», например, или
.
Регулярное выражение для «открывающего или закрывающего HTML-тега без атрибутов»: //i
В начало предыдущего шаблона мы добавили необязательный слеш /? . Этот символ понадобилось заэкранировать, чтобы JavaScript не принял его за конец шаблона.
В этих примерах мы видим общее правило: чем точнее регулярное выражение – тем оно длиннее и сложнее.
Например, для HTML-тегов без атрибутов, скорее всего, подошло бы и более простое регулярное выражение: <\w+>. Но стандарт HTML накладывает более жёсткие ограничения на имя тега, так что более точным будет шаблон <[a-z][a-z0-9]*>.
Подойдёт ли нам <\w+>или нужно использовать <[a-z][a-z0-9]*>? А, может быть, нужно ещё его усложнить, добавить атрибуты?
В реальной жизни допустимы разные варианты. Ответ на подобные вопросы зависит от того, насколько реально важна точность и насколько потом будет сложно или несложно отфильтровать лишние совпадения.
Numbers only regex (digits only)
Numbers only (or digits only) regular expressions can be used to validate if a string contains only numbers.
Basic numbers only regex
Below is a simple regular expression that allows validating if a given string contains only numbers:
Enter a text in the input above to see the result
Example code in Javascript:
Real number regex
Real number regex can be used to validate or exact real numbers from a string.
Enter a text in the input above to see the result
Example code in Javascript:
Enter a text in the input above to see the result
Notes on number only regex validation
In JavaScript you can also validate number by trying to parse it using a Number constructor and then using isNaN function of a Number class:
Create an internal tool with UI Bakery
Discover UI Bakery – an intuitive visual internal tools builder.
JavaScript | Как получить только цифры из строки?
Нам нужно из этой строки удалить все буквы и оставить только символы и цифры. Как это сделать?
В этом нам помогут регулярные выражения, классы символов и диапазоны классов. Все замены мы будем производить методом replace() .
Регулярному выражению будет присвоен глобальный флаг «g» для оценки всех повторений в строке. Заменять мы будем на пустую строку, что будет приравнено к удалению.
Получим слипшиеся цифры в виде одной строки:
только пробелы stroka.replace(/[^0-9, ]/g,"") пробелы и любые другие символы stroka.replace(/[^0-9,\s]/g,"")
В диапазон символов мы добавили пробел, поэтому нам вернулась строка с пробелами.
Альтернативный синтаксис
Можно использовать специальный экранированный класс символа (CharacterClassEscape), который обозначается буквой D .
Он находит сопоставления в строке, которые НЕ равны набору из десяти цифр.
Он экранированный — это значит, что перед D мы должны будем поставить символ обратной косой черты \ . Ну и конечно это всё мы будем вводить внутри шаблона регулярного выражения, который обозначается границами в виде двух косых линий / / .
То есть мы можем найти в строке все места где символ не соответствует одному из: 0123456789
var stroka color: #993300;">Привет1274 ме234ня зо65вут 7987Ефим!"
stroka.replace(/\D/g,'') '1274234657987'