JS Tower
JavaScript & TypeScriptМодуль 3: Строки и числа

Регулярные выражения

Поиск и замена текста по шаблону

Цель урока

В этом уроке ты научишься:

  • Создавать регулярные выражения
  • Искать и заменять текст по шаблону
  • Использовать основные паттерны

Создание RegExp

// Литерал (рекомендуется)
let regex1 = /hello/;

// Конструктор (для динамических паттернов)
let regex2 = new RegExp("hello");

// С флагами
let regex3 = /hello/gi;
let regex4 = new RegExp("hello", "gi");

Флаги

ФлагЗначение
gГлобальный поиск (все совпадения)
iБез учёта регистра
mМногострочный режим
let text = "Hello, hello, HELLO";

console.log(text.match(/hello/));   // ["hello"]
console.log(text.match(/hello/g));  // ["hello"]
console.log(text.match(/hello/gi)); // ["Hello", "hello", "HELLO"]

Методы

test — проверка

let regex = /hello/i;

console.log(regex.test("Hello, world!")); // true
console.log(regex.test("Hi there!"));     // false

match — поиск

let text = "Телефон: 123-456-7890";

console.log(text.match(/\d+/));   // ["123"]
console.log(text.match(/\d+/g));  // ["123", "456", "7890"]

replace — замена

let text = "Привет, мир!";

console.log(text.replace(/мир/, "друг"));     // "Привет, друг!"
console.log(text.replace(/и/g, "!"));         // "Пр!вет, м!р!"

split — разбиение

let text = "яблоко, банан; апельсин";

console.log(text.split(/[,;]\s*/)); // ["яблоко", "банан", "апельсин"]

Специальные символы

Символьные классы

СимволЗначение
\dЦифра (0-9)
\DНе цифра
\wБуква, цифра, _
\WНе буква/цифра/_
\sПробельный символ
\SНе пробельный
.Любой символ
let text = "Код: A1B2C3";

console.log(text.match(/\d/g));  // ["1", "2", "3"]
console.log(text.match(/\w+/g)); // ["Код", "A1B2C3"]

Квантификаторы

СимволЗначение
+1 или более
*0 или более
?0 или 1
{n}Ровно n раз
{n,}n или более
{n,m}От n до m
let text = "Gooooogle";

console.log(text.match(/o+/));     // ["ooooo"]
console.log(text.match(/o{2}/));   // ["oo"]
console.log(text.match(/o{2,4}/)); // ["oooo"]

Позиция

СимволЗначение
^Начало строки
$Конец строки
\bГраница слова
let text = "Hello World";

console.log(/^Hello/.test(text));  // true
console.log(/World$/.test(text));  // true
console.log(/\bWorld\b/.test(text)); // true

Группы и альтернативы

Группы ()

let text = "2024-01-15";

let match = text.match(/(\d{4})-(\d{2})-(\d{2})/);
console.log(match[0]); // "2024-01-15"
console.log(match[1]); // "2024"
console.log(match[2]); // "01"
console.log(match[3]); // "15"

Альтернатива |

let text = "У меня есть кот и собака";

console.log(text.match(/кот|собака/g)); // ["кот", "собака"]

Символьный класс []

let text = "a1b2c3";

console.log(text.match(/[abc]/g));   // ["a", "b", "c"]
console.log(text.match(/[a-z]/g));   // ["a", "b", "c"]
console.log(text.match(/[^0-9]/g));  // ["a", "b", "c"] (не цифры)

Практические примеры

Валидация email

function isValidEmail(email) {
  let regex = /^[\w.-]+@[\w.-]+\.\w{2,}$/;
  return regex.test(email);
}

console.log(isValidEmail("user@example.com")); // true
console.log(isValidEmail("invalid-email"));    // false

Валидация телефона

function isValidPhone(phone) {
  let regex = /^\+7\d{10}$/;
  return regex.test(phone);
}

console.log(isValidPhone("+79001234567")); // true
console.log(isValidPhone("89001234567"));  // false

Извлечение данных

let text = "Цена: 1500 руб., скидка: 200 руб.";

let prices = text.match(/\d+/g);
console.log(prices); // ["1500", "200"]

Форматирование

let phone = "79001234567";

let formatted = phone.replace(/(\d)(\d{3})(\d{3})(\d{2})(\d{2})/, "+$1 ($2) $3-$4-$5");
console.log(formatted); // "+7 (900) 123-45-67"

Практика

Задание 1: Проверка пароля

Задача: Проверь, что пароль содержит минимум 8 символов, цифру и букву.

Запустите код для проверки
Loading...
Ваш вывод:
Ожидаемый результат:
true

Задание 2: Извлечение хэштегов

Задача: Найди все хэштеги в тексте.

Запустите код для проверки
Loading...
Ваш вывод:
Ожидаемый результат:
["#мир","#javascript","#программирование"]

Задание 3: Замена

Задача: Замени все числа на "X".

Запустите код для проверки
Loading...
Ваш вывод:
Ожидаемый результат:
Код: X, пароль: X

Проверь себя

  1. Что означает флаг g?
  2. Чем \d отличается от \D?
  3. Как найти все совпадения в строке?