Пошук уроків, статей та іншого контенту
Освоїте символьні класи, діапазони, заперечення та скорочені класи на кшталт \d, \w і \s.
Символьний клас у регулярному виразі описує один символ із набору можливих символів.
Символьний клас записують у квадратних дужках:
/[abc]/Такий вираз збігається з одним символом:
a;
b;
c.
Важливо: [abc] означає один символ із набору, а не послідовність abc.
/[abc]/.test("cat"); // true: знайдено "a"
/[abc]/.test("dog"); // false: немає a, b або cЯкщо потрібно перевірити всю послідовність, використовуйте квантифікатори або окремі символи:
/abc/.test("abc"); // true
/[abc]{3}/.test("abc"); // true, але також збігається з "aba"Усередині квадратних дужок можна перелічити допустимі символи:
/[aeiou]/Цей вираз знаходить будь-яку голосну літеру латинського алфавіту.
const text = "JavaScript";
console.log(text.match(/[aeiou]/g));
// ["a", "a", "i"]Прапорець g дозволяє знайти всі збіги, а не лише перше.
Символи в класі зазвичай не потрібно розділяти комами:
/[abc]/ // правильно
/[a,b,c]/ // також валідно, але шукає ще й комиУ другому варіанті кома теж стає допустимим символом.
Щоб не перелічувати всі символи вручну, використовують дефіс -. Він задає діапазон.
/[a-z]/Збігається з однією малою латинською літерою від a до z.
/[A-Z]/Збігається з однією великою латинською літерою.
Щоб дозволити літери в обох регістрах:
/[a-zA-Z]/Або можна скористатися прапорцем i:
/[a-z]/iПрапорець i ігнорує регістр.
/[0-9]/Збігається з однією цифрою від 0 до 9.
Діапазони можна комбінувати:
/[a-zA-Z0-9]/Цей клас дозволяє:
малі латинські літери;
великі латинські літери;
цифри.
const values = ["abc", "A7", "_test", "привіт"];
for (const value of values) {
console.log(value, /[a-zA-Z0-9]/.test(value));
}Результат:
abc true
A7 true
_test true
привіт falseВираз перевіряє, чи є в рядку хоча б один відповідний символ. Він не вимагає, щоб увесь рядок складався лише з таких символів.
Якщо після відкривальної квадратної дужки поставити ^, клас стане запереченим:
/[^0-9]/Цей вираз збігається з будь-яким символом, який не є цифрою.
/[^0-9]/.test("123"); // false
/[^0-9]/.test("12a"); // trueУ другому рядку знайдено символ a.
Через те, що регулярний вираз за замовчуванням шукає збіг у будь-якому місці рядка, для перевірки всього значення використовують якорі:
^ — початок рядка;
$ — кінець рядка.
Наприклад, перевіримо, що рядок містить лише цифри:
const onlyDigits = /^[0-9]+$/;
console.log(onlyDigits.test("12345")); // true
console.log(onlyDigits.test("123a")); // false
console.log(onlyDigits.test("a123")); // falseТут:
[0-9] — одна цифра;
+ — одна або більше цифр;
^ і $ — увесь рядок від початку до кінця.
Заперечення класу не означає «не ця послідовність»:
/[^abc]/означає «один символ, який не є a, b або c», а не «рядок, що не дорівнює abc».
Деякі символи мають особливе значення всередині [].
Дефіс задає діапазон:
/[a-z]/Якщо потрібно шукати саме дефіс, його можна:
екранувати;
поставити на початок або в кінець класу.
/[-a-z]/
/[a-z-]/
/[a-z\-]/Усі три варіанти можуть використовуватися для пошуку малої літери або дефіса.
]Закривальна квадратна дужка завершує клас, тому для пошуку самого символу ] її зазвичай екранують:
/[\]]/^На початку класу ^ означає заперечення:
/[^0-9]/В іншому місці він є звичайним символом:
/[a^z]/Цей клас збігається з a, ^ або z.
Щоб знайти символ \, його екранують:
/[\\]/Якщо регулярний вираз записаний як рядок JavaScript, зворотну косу риску потрібно екранувати ще й для самого рядка:
const pattern = new RegExp("[\\\\]");
console.log(pattern.test("\\")); // trueJavaScript має скорочені записи для поширених груп символів.
\d — цифраКлас \d відповідає одній цифрі від 0 до 9.
/\d/.test("abc5"); // true
/\d/.test("abc"); // falseЦе еквівалентно:
/[0-9]/Для пошуку числа з однієї або більше цифр:
/\d+/.test("Кількість: 42"); // trueУ JavaScript \d орієнтований на ASCII-цифри 0–9. Він не охоплює всі можливі десяткові цифри різних писемностей.
\D — не цифраВелика літера означає заперечення:
/\D/Цей клас збігається з будь-яким символом, який не є цифрою.
/\D/.test("123"); // false
/\D/.test("12a"); // true\D еквівалентний [^0-9].
\w — символ словаКлас \w відповідає:
латинським літерам a-z;
латинським літерам A-Z;
цифрам 0-9;
символу підкреслення _.
/\w/.test("user_42"); // trueЕквівалент:
/[A-Za-z0-9_]/Важливо: у JavaScript \w не включає українські літери та більшість інших Unicode-літер.
/\w/.test("hello"); // true
/\w/.test("привіт"); // false\W — не символ слова/\W/.test("hello"); // false
/\W/.test("hello!"); // true\W еквівалентний:
/[^A-Za-z0-9_]/\s — пробільний символКлас \s відповідає пробільним символам, зокрема:
звичайному пробілу;
табуляції;
переносу рядка;
деяким іншим Unicode-пробілам.
/\s/.test("hello world"); // true
/\s/.test("helloworld"); // falseВін зручний для пошуку роздільників між словами:
const words = "JavaScript для початківців";
console.log(words.split(/\s+/));
// ["JavaScript", "для", "початківців"]Тут \s+ означає один або більше пробільних символів.
\S — не пробільний символ/\S/.test(" "); // false
/\S/.test(" a"); // true\S відповідає будь-якому символу, крім пробільного.
Крапка . — це не символьний клас у квадратних дужках, але вона теж часто використовується для позначення символу.
/./Без спеціальних прапорців крапка відповідає майже будь-якому символу, крім переносу рядка.
На відміну від неї, символьний клас чітко описує дозволені символи:
/[a-z]/Порівняння:
/./.test("7"); // true
/[a-z]/.test("7"); // falseДля навчання та перевірок краще надавати перевагу конкретному символьному класу, якщо набір допустимих символів відомий.
Розглянемо просту перевірку ідентифікатора. Нехай він:
починається з латинської літери або _;
далі містить латинські літери, цифри або _;
має довжину щонайменше два символи.
const identifierPattern = /^[A-Za-z_][A-Za-z0-9_]+$/;
const identifiers = [
"user_1",
"_private",
"A7",
"7users",
"user-name",
"x"
];
for (const identifier of identifiers) {
const isValid = identifierPattern.test(identifier);
console.log(`${identifier}: ${isValid ? "коректний" : "некоректний"}`);
}Результат:
user_1: коректний
_private: коректний
A7: коректний
7users: некоректний
user-name: некоректний
x: некоректнийРозберімо вираз:
^[A-Za-z_][A-Za-z0-9_]+$^ — початок рядка;
[A-Za-z_] — перший символ: літера або _;
[A-Za-z0-9_]+ — ще один або більше допустимих символів;
$ — кінець рядка.
Класи на кшталт [a-z], \d і \w у JavaScript орієнтовані переважно на ASCII-символи.
Якщо потрібно працювати з літерами різних мов, можна використовувати Unicode-властивості з прапорцем u:
const ukrainianLetters = /^\p{L}+$/u;
console.log(ukrainianLetters.test("привіт")); // true
console.log(ukrainianLetters.test("JavaScript")); // true
console.log(ukrainianLetters.test("hello123")); // falseТут \p{L} означає символ із властивістю Unicode «літера».
Для початкового використання достатньо пам’ятати:
[a-z] знаходить лише латинські малі літери;
\w не включає українські літери;
для повноцінної роботи з різними мовами можуть знадобитися Unicode-властивості.
/[cat]/Це означає один символ c, a або t, а не слово cat.
Для пошуку слова використовуйте:
/cat//^\d+$/перевіряє, що весь рядок складається з цифр.
А такий вираз:
/\d+/лише шукає число десь усередині рядка:
/\d+/.test("abc123"); // true\w класом для всіх літер/^\w+$/.test("користувач"); // falseУ JavaScript \w не охоплює українські літери.
/[a-z-0-9]/Такий запис може бути складним для читання та призвести до помилок у сприйнятті діапазонів. Якщо потрібен дефіс, краще поставити його в кінці:
/[a-z0-9-]//^[a-z]+$/.test("JavaScript"); // falseЯкщо потрібно дозволити обидва регістри, використовуйте:
/^[a-z]+$/iабо:
/^[a-zA-Z]+$//[^0-9]+/.test("123abc"); // trueЦей вираз знаходить частину abc, але не перевіряє весь рядок.
Для перевірки, що рядок не містить нічого, крім цифр, потрібен позитивний клас із якорями:
/^[0-9]+$/.test("123abc"); // falseСимвольний клас записують у [] і він відповідає одному символу з набору.
[abc] означає a, b або c, а не послідовність abc.
Діапазони записують через дефіс: [a-z], [0-9].
[^...] створює заперечений клас.
\d — цифра, \D — не цифра.
\w — латинська літера, цифра або _, а \W — будь-який інший символ.
\s — пробільний символ, \S — не пробільний.
Для перевірки всього рядка використовуйте ^ і $.
У JavaScript \w і \d не охоплюють усі Unicode-символи.
Якщо дефіс, квадратна дужка або зворотна коса риска мають бути звичайними символами, їх потрібно правильно екранувати або розміщувати в безпечній позиції.