Объект RegExp. Регулярные выражения

Последнее обновление: 26.10.2026

Регулярные выражения представляют шаблон, который используется для поиска или модификации строки. Для работы со строками мы, конечно, можем использовать стандартный набор методов типа String. Однако регулярные выражения предоставляют более гибкий инструмент.

Для работы с регулярными выражениями в JavaScript определен объект RegExp.

Определить регулярное выражение можно двумя способами:

const myExp1 = /hello/;
const myExp2 = new RegExp("hello");

Используемое здесь регулярное выражение довольно простое: оно состоит из одного слова "hello". В первом случае выражение помещается между двумя косыми чертами (так называемая литеральная нотация), а во втором случае используется конструктор RegExp, в который выражение передается в виде строки.

Обычно, если регулярное выражение определяется динамически (например, с помощью ввода пользователя), то применяется конструктор. Если выражение статическое, неизменяемое, то используется литеральная нотация, как в первом случае.

После определения регулярного выражения для обработки строк мы можем использовать один из методов RegExp:

  • test(): проверяет, присутствует ли определенный шаблон в строке. Если строка соответствует шаблону, то этот метод возвращает true, иначе возвращается false.

  • exec(): ищет вхождения определенного шаблона в строку и возвращает эти вхождения в виде массива.

Кроме того, дополнительно для работы с регулярными выражениями мы можем использовать ряд методов типа String:

  • match(): также ищет вхождения определенного шаблона в строку и возвращает эти вхождения в виде массива.

  • replace(): заменяет вхождения определенного шаблона в строке.

  • search(): ищет вхождения определенного шаблона в строку и возвращает индекс первого вхождения.

  • split(): разделяет строку в соответствии с определенным шаблоном и возвращает индекс полученные части строки в виде массива.

test. Проверка соответствия строки шаблону

Для проверки встречается ли в строке текст, который соответствует регулярному выражению, применяется метод test() объекта RegExp. Этот метод возвращает true, если строка содержит текст, который соответствует регулярному выражению, и false, если не содержит.

const initialText = "hello world!";     // строка для поиска
const exp = /hello/;    // регулярное выражение
const result = exp.test(initialText);   // проверяем наличие в строке выражения exp
console.log(result); // true
  
const initialText2 = "Hi all";
const result2 = exp.test(initialText2);
console.log(result2); // false - в строке "Hi all" нет "hello"

В данном случае мы проверяем, есть ли в строках initialText ("hello world!") и initialText2 ("Hi all") выражение exp (/hello/). Поскольку в первой строке такой текст присутствует, то exp.test(initialText) возвращает true. В случае со второй строкой таой текст отсутствует, поэтому возвращается false.

Метод exec

Аналогично работает метод exec - он также проверяет, есть ли в строке текст, который удовлетворяет регулярному выражению. При наличии такого текста метод возвращает ту часть строки, которая соответствует выражению. Если соответствий нет, то возвращается значение null.

const initialText = "hello world!";     // строка для поиска
const exp = /hello/;    // регулярное выражение
const result = exp.exec(initialText);   // проверяем наличие в строке выражения exp
console.log(result); // ['hello', index: 0, input: 'hello world!', groups: undefined]
  
const initialText2 = "Hi all";
const result2 = exp.exec(initialText2);
console.log(result2); // null - в строке "Hi all" нет "hello"

Так, в строке "hello world!" есть текст, который соответствует шаблону /hello/, поэтому вызов метода exp.exec(initialText) возвратит вхождения текста, который соответствует выражению, в строку. И по консольному выводу мы видим, что это не просто текст, а массив значений:

['hello', index: 0, input: 'hello world!', groups: undefined]

Первый элемент массива - собственно текст, который соответствует выражению (в нашем случае "hello"). Второй элемент - индекс этого текста в строке (в нашем случае индекс 0 - начало строки). Третий элемент представляет входную строку. А четвертый элемент представляет группу, которая в примере выше неопределена (группы мы разберем далее).

Группы символов

Выше в качестве регулярного выражения применялась строка "hello". И в реальности для проверки наличия этой подстроки в строке мы могли бы использовать и стандартные методы типа String. Однако это не просто строка, а шаблон, который также может включать специальные элементы синтаксиса регулярных выражений. Рассмотрим самые базовые шаблоны:

  • . (точка) соответствует любому символу

  • a (одиночный символ) соответствует символу "a"

  • ab (объединение символов) соответствует последовательности символов "ab"

  • a|b соответствует либо символу "a", либо символу "b" (символ | можно рассматривать как аналогию операции OR)

Например, нам надо проверить длину пароля - что она не менее 8 символов:

const exp = /......../;    // регулярное выражение - 8 символов

const password1 = "1234567890";
const password2 = "qwery5";
// проверяем первый пароль
console.log(exp.test(password1));   // true -  password1 соответствует выражению exp
// проверяем второй пароль
console.log(exp.test(password2));   // false -  password2 не соответствует выражению exp

Здесь регулярное выражение "/......../" имеет 8 точек. То есть для соответствия этому выражению строка должна иметь как минимум 8 символов.

Другой пример:

const exp = /word|work/;    // соответствует либо "word", либо "work"

const str1 = "hello world";
const str2 = "hello work";
const str3 = "hello word";
console.log(exp.test(str1));   // false
console.log(exp.test(str2));   // true
console.log(exp.test(str3));   // true

Здесь выражение "/word|work/" соответствует тексту, который содержит либо "word", либо "work". Однако это выражение не оптимально - в обоих вариантах повторяются группу символов "wor". Общую группу символов мы можем взять в скобки: "/(wor)d|k/". Результат будет тот же:

const exp = /(wor)d|k/;    // соответствует либо "word", либо "work"

const str1 = "hello world";
const str2 = "hello work";
const str3 = "hello word";
console.log(exp.test(str1));   // false
console.log(exp.test(str2));   // true
console.log(exp.test(str3));   // true

Другой пример - проверим, принадлежит ли почтовый адрес "yandex.ru" или "mail.ru":

const exp = /@yandex|@mail(.ru)/;    // соответствует либо "@yandex.ru" либо "@mail.ru"

const email1 = "tom@mail.ru";
const email2 = "tom@gmail.ru";
const email3 = "tom@yandex.ru";
console.log(exp.test(email1));   // true
console.log(exp.test(email2));   // false
console.log(exp.test(email3));   // true
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850