10.1. Определение регулярных выражений
В JavaScript регулярные выражения представлены объектами RegExp
. Объекты RegExp
могут быть созданы посредством конструктора RegExp(),
но чаще они создаются с помощью специального синтаксиса литералов. Так же как строковые литералы задаются в виде символов, заключенных в кавычки, литералы регулярных выражений задаются в виде символов, заключенных в пару символов слэша (/). Таким образом, JavaScript-код может содержать строки, похожие на эту:
var pattern = /s$/;
Эта строка создает новый объект RegExp
и присваивает его переменной pattern
. Данный объект RegExp
ищет любые строки, заканчивающиеся символом «s». Это же регулярное выражение может быть определено с помощью конструктора RegExp():
var pattern = new RegExp("s$");
Спецификация шаблона регулярного выражения состоит из последовательности символов. Большая часть символов, включая все алфавитно-цифровые, буквально описывают символы, которые должны присутствовать. То есть регулярное выражение /java/
совпадает со всеми строками, содержащими подстроку «java». Другие символы в регулярных выражениях не предназначены для поиска их точных эквивалентов, а имеют особое значение. Например, регулярное выражение /s$/
содержит два символа. Первый символ, s
, обозначает поиск буквального символа. Второй, $
, - это специальный метасимвол, обозначающий конец строки. Таким образом, это регулярное выражение соответствует любой строке, заканчивающейся символом s.
В следующих разделах описаны различные символы и метасимволы, используемые в регулярных выражениях в языке JavaScript.
Литералы RegExp и создание объектов
Литералы простых типов, таких как строки и числа, интерпретируются как одни и те же значения, где бы они ни встретились в программе. Литералы объектов (или инициализаторы), такие как {}
и []
, каждый раз создают новые объекты. Если поместить инструкцию var а = [ ]
в тело цикла, например, в каждой итерации цикла будет создаваться новый пустой массив.
Литералы регулярных выражений - особый случай. Спецификация ЕСМА-Script 3 утверждает, что литерал RegExp
преобразуется в объект RegExp
в ходе синтаксического анализа программного кода и каждый раз, когда интерпретатор встречает литерал RegExp
, он возвращает один и тот же объект. Спецификация ECMAScript 5 изменила это положение вещей и требует, чтобы всякий раз, когда в программе встречается литерал RegExp
, возвращался бы новый объект. Реализация в броузере IE всегда соответствовала поведению, соответствующему ECMAScript 5, и большинство современных броузеров также перешли на новую реализацию, раньше, чем полностью реализовали новый стандарт.
*******************************************
10.1.1. Символы литералов
Как отмечалось ранее, все алфавитные символы и цифры в регулярных выражениях соответствуют сами себе. Синтаксис регулярных выражений в JavaScript также поддерживает возможность указывать некоторые неалфавитные символы с помощью управляющих последовательностей, начинающихся с символа обратного слэша (\). Например, последовательность \n
соответствует символу перевода строки. Эти символы перечислены в табл. 10.1.
Таблица 10.1. Символы литералов в регулярных выражениях

Некоторые знаки препинания имеют в регулярных выражениях особый смысл:
~ $ . * + ? = ! : | \ / ( ) [ ] { }
Значение этих символов раскрывается в последующих разделах. Некоторые из них имеют специальный смысл только в определенных контекстах регулярных выражений, а в других контекстах трактуются буквально. Однако, как правило, чтобы включить какой-либо из этих символов в регулярное выражение буквально, необходимо поместить перед ним символ обратного слэша. Другие символы, такие как кавычки и @
, не имеют специального значения и просто соответствуют в регулярных выражениях самим себе.
Если вы не можете точно вспомнить, каким из символов должен предшествовать символ \
, можете спокойно помещать обратный слэш перед любым из символов. Однако имейте в виду, что многие буквы и цифры вместе с символом слэша обретают специальное значение, поэтому тем буквам и цифрам, которые вы ищете буквально, не должен предшествовать символ \
. Чтобы включить в регулярное выражение сам символ обратного слэша, перед ним, очевидно, следует поместить другой символ обратного слэша. Например, следующее регулярное выражение соответствует любой строке, содержащей символ обратного слэша: /\\/
.
Читать дальше
Конец ознакомительного отрывка
Купить книгу