Регулярные выражения в TypeScript с примерами

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Регулярные выражения в TypeScript: синтаксис, методы и примеры

Регулярные выражения (regex) — мощный инструмент для работы со строками. В TypeScript они позволяют не только искать, заменять и проверять текст, но и получать строгую типизацию результатов. В этой статье мы разберём все аспекты работы с RegExp в TypeScript: от базового синтаксиса до продвинутых приёмов с примерами кода.

1. Создание регулярных выражений в TypeScript

В TypeScript, как и в JavaScript, существует два способа создания регулярного выражения:

Литеральный синтаксис

Самый распространённый и удобный способ — использовать слеши:

const pattern: RegExp = /hello/gi;

Здесь g — глобальный поиск, i — регистронезависимость. Тип RegExp выводится автоматически, но его можно указать явно для читаемости.

Конструктор RegExp

Используется, когда шаблон формируется динамически:

const searchTerm: string = "world";
const dynamicPattern: RegExp = new RegExp(searchTerm, "gi");

Второй аргумент — строка с флагами. Тип возвращаемого значения — RegExp.

2. Основные методы RegExp и String

TypeScript наследует все методы JavaScript, но добавляет к ним строгую типизацию. Рассмотрим ключевые методы с примерами.

Метод test()

Проверяет, есть ли совпадение в строке. Возвращает boolean.

const emailRegex: RegExp = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/;
const email: string = "user@example.com";

const isValid: boolean = emailRegex.test(email);
console.log(isValid); // true

Метод exec()

Ищет совпадение и возвращает детальную информацию. Возвращает RegExpExecArray | null.

const text: string = "Цена: 1500 рублей, скидка: 200 рублей";
const pricePattern: RegExp = /(\d+)\s*рублей/g;

let match: RegExpExecArray | null;
while ((match = pricePattern.exec(text)) !== null) {
    console.log(`Найдено: ${match[0]}, число: ${match[1]}`);
}
// Вывод:
// Найдено: 1500 рублей, число: 1500
// Найдено: 200 рублей, число: 200

Метод match() строки

Работает аналогично exec(), но вызывается на строке. Возвращает RegExpMatchArray | null.

const phone: string = "Контакты: +7 (999) 123-45-67";
const phoneRegex: RegExp = /\+7\s*\(\d{3}\)\s*\d{3}-\d{2}-\d{2}/;

const result: RegExpMatchArray | null = phone.match(phoneRegex);
if (result) {
    console.log(`Найден телефон: ${result[0]}`);
    // Найден телефон: +7 (999) 123-45-67
}

Метод replace()

Заменяет совпадения на новую строку. Возвращает string. Поддерживает колбэк для сложных замен.

function formatDate(input: string): string {
    const datePattern: RegExp = /(\d{4})-(\d{2})-(\d{2})/;
    return input.replace(datePattern, "$3.$2.$1");
}

const isoDate: string = "2025-03-10";
const formatted: string = formatDate(isoDate);
console.log(formatted); // "10.03.2025"

Метод split()

Разбивает строку по регулярному выражению. Возвращает string[].

const data: string = "яблоко;груша;апельсин;банан";
const items: string[] = data.split(/;\s*/);
console.log(items); // ["яблоко", "груша", "апельсин", "банан"]

3. Флаги и их комбинации

Флаги управляют поведением регулярного выражения. В TypeScript они задаются либо в литерале, либо вторым аргументом конструктора.

ФлагОписаниеПример
gГлобальный поиск (все совпадения)/ab/g
iРегистронезависимость/hello/i
mМногострочный режим (^ и $ работают для каждой строки)/^start/m
sТочка соответствует символу перевода строки/./s
uUnicode-режим/\p{L}/u
yПоиск с текущей позиции (sticky)/foo/y

Комбинирование флагов: /pattern/gim. Порядок не важен.

const multilineText: string = `Первая строка
вторая строка
Третья строка`;

const startsWithPattern: RegExp = /^\w+/gm;
const matches: string[] = multilineText.match(startsWithPattern) || [];
console.log(matches); // ["Первая", "вторая", "Третья"]

4. Типизация результатов с помощью групп захвата

TypeScript позволяет типизировать результаты через именованные группы захвата. Это делает код безопаснее и читаемее.

Именованные группы

interface DateParts {
    year: string;
    month: string;
    day: string;
}

function parseDate(input: string): DateParts | null {
    const dateRegex: RegExp = /(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})/;
    const match: RegExpExecArray | null = dateRegex.exec(input);
    
    if (match?.groups) {
        return {
            year: match.groups.year,
            month: match.groups.month,
            day                

Блоги

Рекомендаций по книгам