Регулярные выражения в JavaScript #2
Продолжаем знакомиться с символьными классами у регулярных выражений.
Символьный класс - слово:
\w - символ слова
Символьный класс «\w» ищет латинские буквы, цифры от 0 до 9 или нижнее подчеркивание. В примере ниже этот класс проигнорировал русские буквы и выдал цифру 20 с пробелами.
let regex = /\s\w\w\s/;
let str = 'На тот момент Алексею было 20 лет.';
let result = str.match(regex);
console.log(result);
Символьный класс - не слово:
\W - символ не слова
В качестве шаблона укажем один символ «не слова». Регулярное выражение нашло букву «Н», потому что это первый символ в строке, который не является буквой латинского алфавита, цифрой или подчеркиванием. Данный класс подходит для работы с русскими буквами.
let regex = /\W/;
let str = 'На тот момент Алексею было 20 лет.';
let result = str.match(regex);
console.log(result);
Наборы
Шаблон «[ОА]сю» должен найти в тексте два слова «Осю» и «Асю». Символы в квадратных скобках и есть наборы.
// найти [О и А], после которых идёт "сю"
let regex = /[ОА]сю/;
let str = 'Ты любишь Осю или Асю?';
let result = str.match(regex);
console.log(result);
Исключающие наборы
Данный шаблон найдет в тексте все, что не содержит данные символы «[^ОА]сю»
// найти все что, не [О и А], после которых идёт "сю"
let regex = /[^ОА]сю/;
let str = 'Ты любишь Осю или Асю?';
let result = str.match(regex);
console.log(result);
Диапазоны
Укажем в качестве текста часть алфавита и установим диапазон от буквы «в» до буквы «д».
// найти в строке буквы «в» или «г» или «д»
let regex = /[в-д]/;
let str = 'абвгдежзи';
let result = str.match(regex);
console.log(result);
После запуска кода, регулярное выражение найдет первое совпадение, букву «в».
[ 'в', index: 2, input: 'абвгдежзи', groups: undefined ]
Кроме этого, можно искать совпадения в нескольких диапазонах. Здесь [1-5г-и] ищется цифра от 1 до 5 или буква от «г» до «и».
Исключающие диапазоны
Теперь установим диапазон от буквы «а» до буквы «г» и попробуем найти в строке первое совпадение, которое не входит в данный диапазон.
let regex = /[^а-г]/;
let str = 'абвгдежзи';
let result = str.match(regex);
console.log(result);
После запуска кода, регулярное выражение найдет первое совпадение, букву «д».
[ 'д', index: 4, input: 'абвгдежзи', groups: undefined ]
Еще важно понимать, что диапазон в JavaScript ориентируется не на сами буквы, а на коды их буквенных символов. Например:
console.log(
'a'.charCodeAt(), //97
'b'.charCodeAt(), //98
'c'.charCodeAt(), //99
'ё'.charCodeAt(), //1105
'я'.charCodeAt(), //1103
);
Казус символа «ё»
В русском алфавите буква ё не входит в диапазон от а до я, поскольку ее числовой код (1105) больше, чем код последней буквы я (1103). Букву ё нужно всегда специально добавлять к диапазону.
let regex = /[^а-яё]/;
let str = 'абвгдеёжзийклмнопрстуфхцчшщъыьэюя';
let result = str.match(regex);
console.log(result); //null
Итоги
Символьный класс - это сокращенные обозначения для наборов с квадратными скобками [..]. К символьным классам относятся:
- цифры от 0 до 9
- не цифры от 0 до 9
- пробелы, табуляции и переносы строк
- не пробелы, табуляции и переносы строк
- слово, куда входит цифра от 0 до 9 или латинская буква или нижнее подчеркивание
- не слово
Внутри квадратных скобок [..] наборов пишутся символы (какой-то из них) или исключающие [^..]. Внутри наборов можно указывать диапазоны, вместо простого перечисления нужных символов.
-
- Михаил Русаков
Комментарии (0):
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.