Уроки модуля (4/4)
Экранирование метасимволов
Некоторые символы в регулярном выражении имеют особое значение: они называются
метасимволы. Если вы хотите сопоставить буквальный символ (например, реальный
., настоящая +, настоящая скобка), вам нужно поставить перед ними префикс
обратная косая черта \, которая ускользает от них.
Метасимволов, которые следует запомнить, двенадцать:
. * + ? ^ $ | \ ( ) [ ] { } /(/ на самом деле не является метасимволом движка, но его необходимо экранировать в
буквенная запись JavaScript /.../.)
Pattern: \$\d+\.\d\d
Sample: Prezzi: $9.99, $12.50, totale $22.49.
^^^^^ ^^^^^^ ^^^^^^Здесь мы экранируем $ (привязку конца строки) и . (подстановочный знак), чтобы соответствовать
буквенные символы в формате цены «доллар + число + точка + две цифры».
Двойная обратная косая черта в строках JS
Когда вы пишете шаблон внутри строки JavaScript (как в нашем
упражнения) обратная косая черта должна быть удвоена. Строка JS '\\d' содержит
два символа (\ и d) и в точности соответствует шаблону регулярного выражения \d.
const re1 = /\d+/; // literal notation: a single backslash
const re2 = new RegExp('\\d+'); // string: double backslashРедактор курса показывает уже декодированный шаблон (вы видите один
\d); вам не придется ничего удваивать самостоятельно.
12 специальных метасимволов
Символов со специальным значением в движке ровно 12: \\\ ^ $ . | ? * + ( ) [ {. Если вы хотите сопоставить их как обычный текст, перед ними необходимо поставить обратную косую черту. В некоторых средах (например, необработанные строки JS) вам может потребоваться удвоить обратную косую черту (\\\\).
Попробуйте это
Найдите каждую цену в формате `$N.NN` (доллар, одна или несколько цифр, точка, две цифры). Не забудьте экранировать `$` и `.`.
Показать подсказку
$ должен быть экранирован как \\$, точка — как \\. - в противном случае точка соответствует чему угодно.
Решение доступно после 3 попыток
Обзор упражнения
Найдите в тексте каждый буквальный вопросительный знак `?`. `?` — это метасимвол: его необходимо экранировать.
Показать подсказку
Без побега, ? будет квантором (модуль 2). Поставьте \\ перед ним.
Решение доступно после 3 попыток
Дополнительная задача
Find all occurrences of `.tar.gz` in the text, ensuring that the dots are matched literally.
Показать подсказку
Вставьте обратную косую черту перед каждой точкой, чтобы избежать ее.
Решение доступно после 3 попыток