Лекция: Шаблоны и регулярные выражения.
В JavaScript регулярные выражения представлены объектом RegExp. Свойства RegExp принимают значения литералов регулярных выражений, заключенных в скобки /…/. Регулярные выражения из нескольких символов в стиле Perl записываются в косых скобках. Рассмотрим простой пример: /stud/. Регулярное выражение ищет все строки, содержащие подстроку stud. Выражение /^stud/ означает, что stud должно находится в начале слова (student), а /stud$/ — в конце (restud).
Символы могут объединяться в классы путем помещения в квадратные скобки. Квадратные скобки /[абв]/ означают “любой символ а, б, в из перечисленных в скобках”. Символ ^ в группе соответствует отрицанию, то есть указывает символы, не соответствующие шаблону. /[^абв]/ означает “любой символ отличный от а, б, в ” .
Для создания регулярных выражений могут быть использованы интервалы:
/[0-9]/ — совпадает с любой десятичной цифрой от 0 до 9;
/[a-z]/ — совпадает с любым символом нижнего регистра от а до z;
/[a-zA-Z0-9]/ — совпадает с любым символом или цифрой из набора Latin.
Конструкция [^a-zA-Z] совпадает с любым символом, не входящим в указаные интервалы (a-z и A-Z).
Специальные символы представляет собой алфавитный символ с обратным слешем \ — признаком особой интерпретации следующего за ним символа:
\d — обозначает любую десятичную цифру;
\D — обозначает любой символ кроме десятичной цифры;
\w — алфавитно-цифровой символ /[a-zA-Z0-9_]/
\W — символ, не являющийся алфавитно-цифровым /[^a-zA-Z0-9_]/
\s — пробельный символ
\S — символ не являющийся пробельным
\n – Символ перевода строки. Строка\nЕще строка
\r – Символ возврата каретки. Текст\r
\t – Символ табуляции. \tКрасная строка
\\ – Обратный слеш
Еще один символ \b забой, совпадает с границами слов: /sa\b/. Противоположный символ, \b, совпадает с чем угодно, кроме границы слова: /sa\b/.
Служебный символ. (точка) означает любой символ поэтому для поиска точки ее надо экранировать символом \. Шаблону соответствует знак точки в строке.
Символы +, *,? и {...}, обозначающие количество повторений отдельного символа или конструкции, заключенной в квадратные скобки, называют квантификаторами. Принцип их действия проще всего пояснить на примерах:
[р]+ означает один или несколько символов р, стоящих подряд;
[р]* означает ноль и более символов р, стоящих подряд;
[р]? означает ноль или один символ р;
[р]{2} означает ровно два символа р, стоящих подряд;
[р]{2,3} означает от двух до трех символов р, стоящих подряд;
[р]{2,} означает два и более символов р, стоящих подряд.
Шаблон /stu+/ совпадает с последовательностью stu, за которой могут следовать дополнительные символы u. Рассмотрим другой пример использования квантификатора: /st{2,4}/. Этот шаблон совпадает с символом s, за которым следуют от 2 до 4 экземпляров символа t. /\w{3}\d?/ — три буквы и необязательная цифра. /\s+Java\s+/ — несколько пробелов до слова или после него. Выражение /[\d]+/ используется для поиска цифровой подстроки, выражение /([\d]+)000/ может использоваться при поиске денежных сумм.
Шаблон /<([\w]+)>/ совпадает с конструкциями, заключенными в угловые скобки, — например, тёгами HTML.
Подстроки в регулярных выражениях можно группировать при помощи круглых скобок: /домен – (by|ru|uk|com)/ соответствует строке домен – by или другой.
Оператор | (или) проверяет совпадение одной из нескольких альтернатив. ( ) – Логическая группировка выражений, которая (может)+ повторяться.
В регулярных выражениях могут использоваться флаги. Флаг i указывает, что поиск по шаблону должен быть нечуствительным к регистру символов, а флаг g- поиск должен быть глобальным. Пример:
/\bJava\b/gi
Методы класса String, поддерживающие регулярные выражения:
search(рег_выраж ); возвращает позицию символа в первой найденной подстоке. Например “JavaScript”.search(/script/i) возвращает 4.
Replase(рег_выраж, строка замены); — если указан флаг g, то заменяются все строки с выражением, иначе заменяется только первое найденное вхождение. Text.replace(/Javascript/gi,”JavaScript”). Метод match(рег_выраж) возвращает массив найденных по шаблону подстрок. Метод split(рег_выраж) – разбивает строку на массив строк.