В JavaScript регулярные выражения представлены объектами RegExp. Объекты RegExp могут быть созданы посредством конструктора RegExp(), но чаще они созда_ ются с помощью специального синтаксиса литералов. Так же, как строковые ли_ тералы задаются в виде символов, заключенных в кавычки, литералы регуляр_ ных выражений задаются в виде символов, заключенных в пару символов слэша (/). Таким образом, JavaScript_код может содержать строки, похожие на эту:
1 Происхождение малопонятного термина «регулярное выражение» уходит в дале_ кое прошлое. Синтаксис, применяемый для описания текстового шаблона, дейст_ вительно представляет собою особый тип выражения, однако, как мы увидим, этот синтаксис очень далек от регулярного! Регулярные выражения иногда назы_ вают «regexp», или просто «RE».
11.1. Определение регулярных выражений
var pattern = /s$/;
Эта строка создает новый объект RegExp и присваивает его переменной pattern. Данный объект RegExp ищет любые строки, заканчивающиеся символом s. (Ско_ ро мы поговорим о грамматике определения шаблонов.) Это же регулярное вы_ ражение может быть определено с помощью конструктора RegExp():
var pattern = new RegExp("s$");
Создание объекта RegExp – либо с помощью литерала, либо с помощью конструк_ тора RegExp() – это самая простая часть работы. Более сложную задачу представ_ ляет собой описание нужного шаблона с помощью синтаксиса регулярных выра_ жений. JavaScript поддерживает довольно полное подмножество синтаксиса ре_ гулярных выражений, используемых в Perl, поэтому если вы опытный Perl_про_ граммист, то уже знаете, как описывать шаблоны в JavaScript.
Спецификация шаблона регулярного выражения состоит из последовательности символов. Большинство символов, включая все алфавитно_цифровые, просто бук_ вально описывают символы, которые должны присутствовать. То есть регуляр_ ное выражение /java/ ищет все строки, содержащие подстроку "java". Другие символы в регулярных выражениях не предназначены для поиска их точных эк_ вивалентов, а имеют особое значение. Например, регулярное выражение /s$/ со_ держит два символа. Первый символ, s, обозначает поиск буквального символа. Второй, $, – это специальный метасимвол, обозначающий конец строки. Таким образом, это регулярное выражение соответствует любой строке, заканчиваю_ щейся символом s.
В следующих разделах описаны различные символы и метасимволы, используе_ мые в регулярных JavaScript_выражениях. Следует заметить, что полное описа_ ние регулярных выражений выходит за рамки темы этой книги, его можно най_ ти в книгах по Perl, таких как книга издательства O’Reilly «Programming Perl» Ларри Уолла (Larry Wall), Тома Кристиансена (Tom Christiansen) и Джона Ор_ ванта (Jon Orwant).1 Еще один отличный источник информации по регулярным выражениям – книга издательства O’Reilly «Mastering Regular Expressions» Джеффри Фридла (Jeffrey E. F. Friedl).2