3.2.4. Сопоставление с шаблонами

В языке JavaScript определен конструктор RegExp(), предназначенный для создания объектов, представляющих текстовые шаблоны. Эти шаблоны описываются с помощью регулярных выражений, синтаксис которых был заимствован языком JavaScript из языка Perl. И строки, и объекты RegExp имеют методы, позволяющие выполнять операции сопоставления с шаблоном и поиска с заменой при помощи регулярных выражений.

RegExp не относится к числу фундаментальных типов данных языка JavaScript. Подобно объектам Date, они просто являются специализированной разновидностью объектов с удобным прикладным интерфейсом. Грамматика регулярных выражений и прикладной интерфейс отличаются повышенной сложностью. Они подробно описываются в главе 10. Однако поскольку объекты RegExp обладают широкими возможностями и часто используются на практике, мы коротко познакомимся с ними в этом разделе.

Несмотря на то что объекты RegExp не относятся к фундаментальным типам данных языка, они имеют синтаксис литералов и могут вставляться непосредственно в текст программы на языке JavaScript. Текст, заключенный в пару символов слэша, интерпретируется как литерал регулярного выражения. За вторым символом слэша из этой пары может следовать один или более символов, которые модифицируют поведение шаблона. Например:

/"HTML/            // Соответствует символам Н Т М L в начале строки

/[ 1-9][0-9]*/     // Соответствует цифре, кроме нуля, за которой следует любое число цифр

/javascript/i  // Соответствует подстроке "javascript”

                   // как отдельному слову, учитывает регистр символов

Объекты RegExp обладают множеством полезных методов. Кроме того, строки также обладают методами, которые принимают объекты RegExp в виде аргументов. Например:

var text = "testing: 1, 2, 3”; // Образец текста

var pattern = /d+/g       // Соответствует всем вхождениям одной или более цифр

pattern.test(text)         // => true: имеется совпадение

text.search(pattern)       // => 9: позиция первого совпадения

text.match(pattern)        // => ["1", "2", "3"]: массив всех совпадений

text.replace(pattern,'#'); // => "testing: tf, tf. #"

text.split(/D+/);         // => "1","2","3"]: разбить по нецифровым символам