Регулярные выражения (объект RegExp)

Регулярное выражение это последовательность символов, которые формируют шаблон поиска.

Когда вам нужно что-то найти в каком-то тексте, то для описания того, что вы ищите, и используется шаблон поиска.

В качестве регулярного выражения может использоваться как один символ, так и более сложный шаблон.

Регулярные выражения могут использоваться для выполнения всех видов операций текстового поиска и замены.

Синтаксис:


/шаблон/модификаторы;

Пример:


var patt = /msiter/i;

Объяснение примера:

  • /msiter/i — регулярное выражение.
  • msiter – шаблон, используемый в операции поиска.
  • i — модификатор (определяет, что поиск должен быть регистронезависимым).

Использование методов строки

В JavaScript регулярные выражения часто используют в двух методах строки: search() и replace().

Метод search() использует выражение для поиска совпадения и возвращает позицию найденного совпадения.

Метод replace() возвращает измененную строку, где произведена замена шаблона.

Метод search() с регулярным выражением

В следующем примере для регистронезависимого поиска используется регулярное выражение:


var str = "Посетите сайт MSiter";
var n = str.search(/msiter/i); 

В результате в переменную n будет возвращено 14.

Метод search() со строкой

Метод search() в качестве параметра также может принимать строку. При этом строковый параметр преобразуется в регулярное выражение:

В следующем примере для поиска используется строка "MSiter":


var str = "Посетите сайт MSiter!";
var n = str.search("MSiter"); 

Метод replace() с регулярным выражением

В следующем примере, чтобы заменить подстроку "Microsoft" на "Msiter" без учета регистра, используется регулярное выражение:


var str = "Посетите сайт Microsoft!";
var res = str.replace(/microsoft/i, "MSiter"); 

В результате в переменной res будет строка "Посетите сайт MSiter!".

Метод replace() со строкой

Метод replace() в качестве параметра также может принимать строку:


var str = "Посетите сайт Microsoft!";
var res = str.replace("Microsoft", "MSiter"); 

А вы заметили, что

  • В описанных методах в качестве параметров можно использовать регулярные выражения (вместо строки).
  • Регулярные выражения предоставляют значительно больший контроль над процессом поиска (например, можно производить поиск без учета регистра букв).

Модификаторы регулярного выражения

Модификаторы позволяют расширить область поиска:

Модификатор Описание
i Поиск без учета регистра букв
g Глобальный поиск (поиск всех совпадений, а не останавливаться после первого найденного)
m Многострочный поиск

Шаблоны регулярных выражений

Квадратные скобки используются для поиска в диапазоне символов:

Выражение Описание
[abc] Найти любой из символов в квадратных скобках
[0-9] Найти любую из цифр в квадратных скобках
(x|y) Поиск альтернативы — один ИЛИ (|) другой вариант

Метасимволы — это символы со специальным значением:

Метасимвол Описание
\d Найти число
\s Найти пробельный символ
\b Найти совпадение в начале или в конце слова
\uxxxx Найти символ в кодировке Юникод, заданный шестнадцатеричным числом xxxx

Квантификаторы определяют количество повторений:

Квантификатор Описание
n+ Искать один или более символ n
n* Искать ноль или более символов n
n? Искать ноль или один символ n

Объект RegExp

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

Метод test()

Метод test() объекта RegExp используется для поиска шаблона в заданной строке. В зависимости от результата он возвращает true или false.

В следующем примере в строке ищется символ "e":


var patt = /e/;
patt.test("The best things in life are free!"); 

Так как в этом примере строка содержит символ "e", результат будет true.

Для работы с объектом RegExp не обязательно сначала помещать регулярное выражение в переменную. Две строчки кода предыдущего примера можно сократить до одной:


/e/.test("The best things in life are free!");

Метод exec()

Метод exec() объекта RegExp используется для поиска шаблона в заданной строке. Он возвращает найденный текст. Если ничего не было найдено, то возвращается null.

В следующем примере в строке ищется символ "e":


/e/.exec("The best things in life are free!"); 

Так как в этом примере строка содержит символ "e", результат будет - e.