Каталог
Веб-разработка с нуля: четыре курса по порядку.
HTML, затем CSS, JavaScript и SQL. Каждый курс говорит, что нужно знать до него и что вы будете уметь после.
Загружаем курсы…
Каталог
HTML, затем CSS, JavaScript и SQL. Каждый курс говорит, что нужно знать до него и что вы будете уметь после.
Загружаем курсы…
Урок 92 из 114 · 10 мин
Группы ( ), именованные (?<name>), обратные ссылки, lookahead и lookbehind, замены с $1 и функцией, RegExp.escape и символы Symbol.match, matchAll, replace, search, split.
Из строк «Блокнот 220» хочу получить название и цену отдельно.
Скобки в регулярке запоминают части совпадения — это группы. Им можно дать имена.
m[1]; именованная группа (?<price>\d+) — в m.groups.price; (?:…) — группа без запоминания; \1 или \k<имя> — обратная ссылка.const m = "Блокнот 220".match(/(?<item>\p{L}+) (?<price>\d+)/u);
console.log(m.groups.item, Number(m.groups.price));
console.log(/(\p{L})\1/u.test("привет ее"));console.log("220₽ 300$".match(/\d+(?=₽)/g), "блокнот и не пенал".match(/(?<!не )\p{L}{3,}/gu));$1, $<name>, $& (всё совпадение); вместо строки можно передать функцию (match, ...groups) => ….console.log("2026-11-02".replace(/(\d+)-(\d+)-(\d+)/, "$3.$2.$1"));
console.log("блокнот 220".replace(/\d+/, (p) => p * 2));RegExp.escape()RegExp.escape("1+1") экранирует +.const q = "блокнот (L)";
console.log(new RegExp(RegExp.escape(q)).test("Большой блокнот (L)"));Symbol.match · .matchAll · .replace · .searchstr.match(re) на самом деле вызывает re[Symbol.match](str); так же устроены matchAll, replace и search. Свой объект с такими методами можно передавать в эти методы строк.const vowels = { [Symbol.search](s) { return s.search(/[аеёиоуыэюя]/i); } };
console.log("Пенал".search(vowels));Symbol.splitstr.split(sep) вызывает sep[Symbol.split](str), если такой метод есть.const digits = { [Symbol.split](s) { return s.split(/\D+/).filter(Boolean); } };
console.log("тел. 8-999-123".split(digits));Вставляешь в регулярку текст пользователя — сначала RegExp.escape.
Напиши parseItem(line): из строки вида "Блокнот 220" возвращает { item: "Блокнот", price: 220 } через именованные группы, или null, если формат не подходит.
Выберите один ответ.
Где найти значение группы (?<price>\d+)?
Выберите один ответ.
Зачем RegExp.escape(text)?
Проверяем состояние обучения…