Пошук уроків, статей та іншого контенту
Пошук і перевірка тексту за шаблоном — синтаксис RegExp, найпотрібніші символи класів та методи рядків, що їх приймають.
Методи рядків із першого уроку цього модуля (includes, startsWith) чудово перевіряють точний, наперед відомий текст. Але задачі на кшталт «чи схоже це на email-адресу», «чи складається рядок лише з цифр» чи «знайти всі номери телефонів у тексті» вимагають опису шаблону, а не конкретного значення. Регулярний вираз (regular expression, regex) — компактна мова опису текстових шаблонів, вбудована в JavaScript через тип RegExp.
const pattern = /hello/; // літерал регулярного виразу — між скісними рисками
const patternWithFlags = /hello/gi; // з прапорцямиg (global) — знайти всі збіги, а не лише перший.
i (insensitive) — ігнорувati регістр літер.
const hasDigit = /\d/;
hasDigit.test("abc123"); // true — містить хоча б одну цифру
hasDigit.test("abc"); // false\d — будь-яка цифра (те саме, що [0-9]).
\w — буква, цифра чи підкреслення ("word character").
\s — пробільний символ (пробіл, таб, перенос рядка).
. — будь-який символ, окрім переносу рядка.
\D, \W, \S — протилежність до відповідного маленького варіанта (НЕ цифра, НЕ word character тощо).
/\d*/; // 0 або більше цифр
/\d+/; // 1 або більше цифр
/\d?/; // 0 або 1 цифра (необов'язковий символ)
/\d{3}/; // рівно 3 цифри
/\d{2,4}/; // від 2 до 4 цифр^ прив'язує до початку рядка, $ — до кінця. Без них шаблон шукає збіг будь-де в рядку:
/^\d+$/.test("12345"); // true — ВЕСЬ рядок складається з цифр
/^\d+$/.test("12345a"); // false — є зайвий символ наприкінці
/\d+/.test("12345a"); // true — без якорів достатньо знайти цифри БУДЬ-ДЕconst simpleEmailPattern = /^[\w.-]+@[\w.-]+\.\w+$/;
simpleEmailPattern.test("test@example.com"); // true
simpleEmailPattern.test("не-email"); // falseПовна, стовідсотково коректна валідація email-адрес за єдиним регулярним виразом — відома пастка навіть для досвідчених розробників (офіційний стандарт email напрочуд складний). Простий шаблон вище годиться для базової перевірки формату на клієнті, але остаточну валідність усе одно підтверджує лист із кодом підтвердження, а не regex.
const text = "Зателефонуйте: 0501234567 або 0671112233";
text.match(/\d{10}/g);
// ["0501234567", "0671112233"] — усі збіги завдяки прапорцю g
text.replace(/\d{10}/g, "[приховано]");
// "Зателефонуйте: [приховано] або [приховано]"Ці методи рядків (match, replace) приймають RegExp там само, де перший урок цього модуля показував їх зі звичайним рядком — регулярний вираз просто розширює, що саме вважається «збігом».
const dateText = "Дата: 2026-06-15";
const match = dateText.match(/(\d{4})-(\d{2})-(\d{2})/);
match[0]; // "2026-06-15" — увесь збіг
match[1]; // "2026" — перша група в дужках
match[2]; // "06"
match[3]; // "15"Забутий прапорець g при пошуку всіх збігів — match поверне лише перший (детальніше — інформація лише про перший збіг, а не масив усіх).
Надмірно складні регулярні вирази для задач, де прості методи рядків (includes, startsWith) виконали б ту саму роботу зрозуміліше.
Спроба парсити HTML чи інші вкладені структури регулярними виразами — вони добре працюють для плаского тексту, погано для рекурсивно вкладеного синтаксису.
Регулярний вираз описує текстовий шаблон, а не конкретне значення — test() перевіряє відповідність, match/matchAll знаходять збіги, replace замінює. Класи символів (\d, \w, \s) та квантифікатори (*, +, ?, {n,m}) — базовий словник для опису шаблону, якорі (^, $) прив'язують до меж рядка. Regex потужний для перевірки формату й пошуку в тексті, але не заміна повноцінному парсеру для вкладених структур.
Спробуйте самостійно
Напишіть регулярний вираз, що перевіряє, чи складається рядок лише з української кирилиці та пробілів (підказка: діапазон літер а-яіїєґ разом із прапорцем i для великих літер).