Глава 3.5. Регулярные выражения3.5.1. Общее описаниеРегулярные выражения представляют собой образцы для поиска заданных комбинаций символов в текстовых строках (такой поиск называется сопоставлением с образцом). Существует два способа присваивания переменным регулярных выражений, а именно:
Здесь pattern регулярное выражение, а switch необязательные опции поиска. Инициализаторы объекта, например, Вызов конструктора, например, При создании регулярного выражения следует учитывать, что заключение его в кавычки влечет за собой необходимость использовать escape-последовательности, как и в любой другой строковой константе. Например, следующие два выражения эквивалентны: var re = /\w+/g; var re = new RegExp("\\w+", "g"); // В строке '\' должно заменяться на '\\' Примечание. Регулярное выражение не может быть пустым: два символа // подряд задают начало комментария. Поэтому для задания пустого регулярного выражения используйте выражение /.?/. Регулярные выражения используются методами exec и test объекта RegExp и методами match, replace, search и split объекта String. Если нам нужно просто проверить, содержит ли данная строка подстроку, соответствующую образцу, то используются методы test или search. Если же нам необходимо извлечь подстроку (или подстроки), соответствующие образцу, то нам придется воспользоваться методами exec или match. Метод replace обеспечивает поиск заданной подстроки и замены ее на другую строку, а метод split позволяет разбить строку на несколько подстрок, основываясь на регулярном выражении или обычной текстовой строке. Более подробные сведения о применении регулярных выражений приведены в описании соответствующих методов. 3.5.2. Синтаксис регулярных выраженийРегулярное выражение может состоять из обычных символов; в этом случае оно будет соответствовать заданной комбинации символов в строке. Например, выражение /ком/ соответствует выделенным подстрокам в следующих строках: "комок", "лакомка", "главком флота". Однако, гибкость и мощь регулярным выражениям придает возможность использования в них специальных символов, которые перечислены в следующей таблице.
Регулярные выражения вычисляются аналогично остальным выражениям JavaScript, т. е. с учетом приоритета операций: операции, имеющие больший приоритет, выполняются первыми. Если операции имеют равный приоритет, то они выполняются слева направо. В следующей таблице приведен список операций регулярных выражений в порядке убывания их приоритетов; операции, расположенные в одной строке таблицы, имеют равный приоритет.
3.5.3. Опции поискаПри создании регулярного выражения мы можем указать дополнительных опции поиска:
Поддержка: Опция "m" поддерживается с версии 5.5. Опция "m" не поддерживается. Вместо нее используется статическое свойство multiline объекта RegExp. Приведем несколько примеров. Поскольку регулярные выражения различают строчные и прописные буквы, следующий сценарий var s = "Изучаем язык JavaScript"; var re = /JAVA/; var result = re.test(s) ? "' " : "' не "; document.write("Строка '" + s + result + "соответствует образцу " + re); выведет в окно обозревателя текст: Строка 'Изучаем язык JavaScript' не соответствует образцу /JAVA/ Если мы теперь заменим вторую строку примера на Строка 'Изучаем язык JavaScript' соответствует образцу /JAVA/i Теперь рассмотрим опцию глобального поиска. Она обычно применяется методом replace при поиске образца и замены найденной подстроки на новую. Дело в том, что по умолчанию этот метод производит замену только первой найденной подстроки и возвращает полученный результат. Рассмотрим следующий сценарий: var s = "Мы пишем сценарии на JavaScript, " + "но JavaScript - не единственный сценарный язык."; var re = /JavaScript/; document.write(s.replace(re, "VBScript")); Он выводит в окно обозревателя текст, который явно не соответствует желаемому результату: Мы пишем сценарии на VBScript, но JavaScript - не единственный сценарный язык. Для того, чтобы все вхождения строки "JavaScript" были заменены на "VBScript",
мы должны изменить значение регулярного выражения на Мы пишем сценарии на VBScript, но VBScript - не единственный сценарный язык. Наконец, опция многострочного поиска позволяет проводить сопоставление с образцом строкового выражения, состоящего из нескольких строк текста, соединенных символами разрыва строки. По умолчанию, сопоставление с образцом прекращается, если найден символ разрыва строки. Данная опция преодолевает указанное ограничение и обеспечивает поиск образца по всей исходной строке. Она также влияет на интерпретацию некоторых специальных символов в регулярных выражениях, а именно:
3.5.4. Запоминание найденных подстрокЕсли часть регулярного выражения заключена в круглые скобки, то соответствующая ей подстрока будет запомнена для последующего использования. Для доступа к запомненным подстрокам используются свойства $1, , $9 объекта RegExp или элементы массива, возвращаемого методами exec и match. В последнем случае количество найденных и запомненных подстрок не ограничено. Например, следующий сценарий использует метод replace для перестановки слов в строке. Для замены найденного текста используются свойства $1 и $2. var re = /(\w+)\s(\w+)/; var str = "Михаил Булгаков"; document.write(str.replace(re, "$2, $1")) Этот сценарий выведет в окно обозревателя текст: Булгаков, Михаил | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||