Інтерактивний курс
Курс Regex
Вивчайте регулярні вирази з нуля англійською мовою за допомогою механізму, який запускає кожен шаблон безпосередньо в браузері та показує збіги в реальному часі.
01 · Модуль 1 — Основи
Основи регулярних виразів: літеральні шаблони, базові класи символів, символ узагальнення `.` та екрановані мета-символи.
- 1.1Літеральні шаблониЗвичайні символи, чутливість до регістру та перший запуск: відповідність та індекс.~8 min
- 1.2Основні класи: \d \w \sПопередньо визначені класи для цифр, символів слів і пробілів (і їх заперечені версії).~10 min
- 1.3Символ підстановки: крапка `.`Символ `.` відповідає майже всьому: що він включає, що він виключає, і чому прапор `s` має значення.~8 min
- 1.4Екранування метасимволів12 метасимволів, які потрібно екранувати за допомогою `\`, коли потрібна подвійна зворотна коса риска та чому.~10 min
02 · Модуль 2 — Квантори
Скільки повторювати: `*`, `+`, `?`, інтервали `{n,m}` і різниця між жадібним і ледачим.
- 2.1`*`, `+`, `?`Нуль або більше, один або більше, необов’язково: три основні квантори.~10 min
- 2.2Точні величини `{n,m}`Точно `n`, від `n` до `m`, принаймні `n`: числовий квантор.~10 min
- 2.3Жадібний проти лінивогоЗа замовчуванням квантифікатори жадібні (`.*`); додайте `?` для відкладеної версії (`.*?`).~10 min
- 2.4Відстеження: оглядЩо робить механізм, коли жадібний квантифікатор виходить з ладу, і чому це може бути дорогим.~12 min
03 · Модуль 3 — Якорі та межі
Позиція, а не символи: прив’язка до початку/кінця рядка, до меж слів і до початку/кінця кожного рядка з прапорцем `m`.
- 3.1Початок і кінець: `^` і `$`Прив’язка шаблону до першого чи останнього символу рядка.~8 min
- 3.2Межі слова: `\b` `\B`Перехід між словесними і неслівними символами; знаходження цілих слів.~10 min
- 3.3Прапор `m`: багаторядковийЗ прапорцем `m` `^` і `$` прив'язуються до початку/кінця кожного рядка.~10 min
- 3.4Порожні рядки та обрізкаКорисні шаблони: зіставлення порожніх рядків, обрізання пробілів на початку/кінці рядка.~10 min
04 · Модуль 4 — Групи та чергування
Згрупуйте за допомогою `()`, виберіть серед альтернатив за допомогою `|`, уникайте захоплення за допомогою `(?:...)`, назвіть групи за допомогою `(?<name>...)` і поверніться до попереднього захоплення за допомогою зворотних посилань.
- 4.1Групи захоплення: `(...)`Дужки для групування та захоплення; групи доступу 1, 2, 3… у матчах.~10 min
- 4.2Чергування: `|`Труба вибирає між двома або більше підпатернами; пріоритет і дужки.~10 min
- 4.3Групи без захоплення: `(?:...)`Групувати без створення запису: корисно, коли вам потрібно лише кількісно визначити чи чергувати.~10 min
- 4.4Іменовані групи та зворотні посилання`(?<ім'я>...)`, щоб дати назву; `\1` `\k<name>`, щоб повернутися до запису.~12 min
05 · Модуль 5 — Класи символів
Визначте спеціальні набори за допомогою `[...]`, використовуйте діапазони, заперечуйте за допомогою `[^...]` і досягайте властивостей Unicode за допомогою `\p{...}` і прапора `u`.
- 5.1Набори символів: `[abc]`Квадратні дужки визначають набір символів, дозволених в одній позиції.~8 min
- 5.2Діапазони всередині класів: `[a-z0-9]`Інтервали через тире; поєднання діапазонів і окремих символів.~8 min
- 5.3Заперечення: `[^...]`Заперечений клас відповідає будь-чому, **окрім** перелічених символів.~8 min
- 5.4Екранування властивості Unicode`\p{L}`, `\p{N}`, `\p{Script=...}` з прапорцем `u`: семантичні класи Unicode.~12 min
06 · Модуль 6 — Огляд
Твердження нульової ширини: дивіться вперед або назад у рядку без використання символів. Огляд вперед `(?=)` `(?!)`, огляд `(?<=)` `(?<!)`.
- 6.1Позитивний перегляд: `(?=...)`Переконайтеся, що певний шаблон відповідає поточній позиції, не споживаючи його.~10 min
- 6.2Негативний перегляд: `(?!...)`Переконайтеся, що певний шаблон НЕ відповідає поточній позиції.~10 min
- 6.3Lookbehind: `(?<=...)` `(?<!...)`Версії огляду "погляд назад"; Підтримка ES2018+.~12 min
- 6.4Огляд на практиціВитягувати значення без включення контексту, перевіряти паролі, аналізувати числа з роздільниками.~12 min
07 · Модуль 7 — Прапори, підстановка, розбиття
Усі прапорці (включаючи `d`, `v`), `String.prototype.replace`/`replaceAll`/`split` з регулярним виразом, посилання `$1`/`$<name>` у рядку підстановки та зворотні виклики заміни.
- 7.1Всі прапори в деталях`g i m s u v y d`: що кожен робить і як вони поєднуються.~12 min
- 7.2Базова заміна та `$1`Замініть збіги фіксованим рядком або зворотними посиланнями `$1` / `$<name>`.~10 min
- 7.3Замінити зворотним викликомФункція заміни: трансформувати кожен збіг довільним кодом JS, доступ до груп.~12 min
- 7.4Розділити за допомогою регулярного виразуРозбити рядок на шаблон (дозвільний CSV, мінімальний токенізер).~10 min
08 · Модуль 8 — Практика
Об’єднайте все разом для вирішення реальних проблем: перевіряйте електронні листи, аналізуйте журнали, вилучайте URL-адреси/IP-адреси, створюйте шаблони, стійкі до ReDoS.
- 8.1Перевірка електронної пошти"Достатньо хороший" шаблон для електронних листів із поясненням компромісів.~12 min
- 8.2Парсер журналів ApacheВитягніть IP-адресу, метод, шлях і код статусу з рядка журналу за допомогою іменованих груп.~12 min
- 8.3Витяг URL-адрес та IP-адресРозпізнавати URL-адреси http(s) і адреси IPv4 у довільному тексті.~12 min
- 8.4Написання ReDoS-безпечних шаблонівРозпізнавайте катастрофічні шаблони (`(a+)+b`), рефакторюйте їх, використовуйте атомарні квантори.~14 min