Регулярные выражения используются для поиска в тексте подстроки, соответствующей некоторому заданному шаблону. С их помощью можно выделить из текста html-страницы ссылки, проверить перед отправкой правильность заполнения полей формы, и многое другое.
Регулярное выражение в JavaScript – это объект класса RegExp. Соответственно, создаются они так:
var re = new RegExp(’str’, ’i’);
Здесь ‘str’ – шаблон для поиска, а ‘i’ – так называемый модификатор. Модификаторы задают некоторые параметры поиска. Так, в данном случае модификатор /i указывает, что поиск будет производиться без учёта регистра. Поэтому re совпадёт как со строкой ‘str’, так и со строкой ‘StR’. Без модификатора /i вторая подстрока не соответствовала бы шаблону.
Для создания объектов RegExp можно использовать упрощенный синтаксис:
var re = /str/i;
Пример Js40
Рассмотрим, как применять регулярные выражения для поиска подстрок. Метод класса String search производит поиск совпадения с регулярным выражением, возвращая индекс начала совпадения или -1, если подстрока не найдена. Так, код
var re = /str/i;
var st = " String where substring is searched.";
var s = "Does not match";
alert(st.search(re) + ' ' + s.search(re));
выведет
Заметим, что поиск в строке st даёт 1 (String), а не 17 (substring), то есть ищется именно первое совпадение. Если же совпадения нет, возвращается -1, что видно на примере поиска в строке s.
Пример Js38
Метод match также ищет подстроку, совпадающую с шаблоном, но возвращает массив, содержащий совпадения, или null, если совпадений нет. Так, код
var re = /str/i;
var st = " String where substring is searched.";
var s = "Does not match";
alert(st.match(re) + ' ' + s.match(re));
покажет
Пример Js39
Заметим, что опять возвращено только первое совпадение. Чтобы найти все, необходимо указать модификатор /g:
var re = /str/ig;
var st = " String where substring is searched.";
var s = "Does not match";
alert(st.match(re) + ' ' + s.match(re));
Тогда результат будет следующим:
Пример Js41
Далее, метод replace заменяет найденные соответствия указываемой подстрокой. К примеру,
Наконец, метод split производит разбиение строки по подстрокам, соответствующим шаблону. Например,
var re = /,/;
var st = "comma,separated,values";
alert(st.split(re)[2]);
выведет
st.split(re) создаёт массив [‘comma’, ‘separated’, ‘values’], разбивая строку по запятой, так как именно запятая совпадает с шаблоном re, затем выводится последний элемент этого массива.
Пример Js43
Помимо методов класса String можно пользоваться методами класса RegExp exec и test. Первый возвращает массив, содержащий подстроку, совпадающую с шаблоном, что очень похоже на поведение match с регулярным выражением в отсутствие модификатора /g. Второй просто возвращает логическое значение, сигнализирующее, есть ли совпадение. Так, пример
На самом деле работа этих методов описана не полностью, поскольку мы ещё не знаем всей мощи регулярных выражений. По ходу изучения регулярных выражений будем уточнять работу этих методов.