en.javascript.info/03-more/08-regular-expressions-javascript/01-regexp-introduction/article.md
Ilya Kantor f301cb744d init
2014-10-26 22:10:13 +03:00

5 KiB
Raw Blame History

Паттерны и флаги

Регулярные выражения - мощное средство поиска и замены в строке.

В JavaScript регулярные выражения реализованы отдельным объектом RegExp и интегрированы в методы строк. [cut]

Регэкспы

Регулярное выражение (оно же "регэксп", "регулярка" или просто "рег"), состоит из паттерна (он же "шаблон") и необязательных флагов.

Синтаксис создания регулярного выражения:

var regexp = new RegExp("шаблон", "флаги");

Как правило, используют более короткую запись через слеши /:

var regexp = /шаблон/;     // без флагов
var regexp = /шаблон/gmi;  // с флагами gmi (изучим их дальше)

Слэши '/' говорят JavaScript о том, что это регулярное выражение. Они играют здесь ту же роль, что и кавычки для обозначения строк.

Использование

Основа регулярного выражения -- паттерн. Это строка, которую можно расширить специальными символами, которые делают поиск намного мощнее.

Если флагов и специальных символов нет, то поиск по паттерну -- то же самое, что и обычный поиск подстроки:

//+ run
var str = "Я люблю JavaScript!"; // будем искать в этой строке
 
var regexp = /лю/; 
alert( str.search(regexp) ); // 2

Сравните с обычным поиском:

//+ run
var str = "Я люблю JavaScript!"; 
 
var substr = "лю"; 
alert( str.indexOf(substr) ); // 2

Как видим, то же самое, разве что для регэкспа использован метод [:String#search(reg)], а для строки [:String#indexOf(substr)]. Но это соответствие лишь кажущееся. Очень скоро мы усложним регулярные выражения, и тогда появятся отличия.

[smart header="Цветовые обозначения"] Здесь и далее используется следующая цветовая схема:

  • регэксп (регулярное выражение) - красный
  • строка - синий
  • результат - зеленый
[/smart]

Флаги

Регулярные выражения могут иметь флаги, которые влияют на поиск.

В JavaScript их всего три:

`i`
Если этот флаг есть, то регэксп ищет независимо от регистра, то есть не различает между `А` и `а`.
`g`
Если этот флаг есть, то регэксп ищет все совпадения, иначе -- только первое.
`m`
Многострочный режим.

Самый очевидный из этих флагов -- безусловно, i.

Пример его использования:

//+ run
var str = "Я люблю JavaScript!"; // будем искать в этой строке
 
alert( str.search( *!*/ЛЮ/*/!* ) ); // -1
alert( str.search( *!*/ЛЮ/i*/!* ) ); // 2
  1. С регом `/ЛЮ/` вызов вернул `-1`, что означает "не найдено" (то же соглашение, что и `indexOf`),
  2. С регом `/ЛЮ/i` вызов нашёл совпадение на позиции 2, так как стоит флаг `i`, а значит "лю" тоже подходит.

Следующий, пожалуй, самый важный флаг -- это g.

Мы рассмотрим его в следующей секции, вместе с основными методами поиска по регулярным выражениям в JavaScript.

Итого

  • Регулярное выражение состоит из шаблона и необязательных флагов `g`, `i` и `m`.
  • Поиск по регулярному выражению /регэксп/ без флагов и спец. символов, которые мы изучим далее -- это то же самое, что и обычный поиск подстроки в строке.
  • Метод строки `str.search(regexp)` возвращает индекс, на котором найдено совпадение.