JavaScript Регулярные выражения • • • • • • • • • • • Введение Создание регулярных выражений Флаги (способы поиска по шаблону) Метасимволы Специальные символы Квантификаторы повторения Позиционные проверки Управляющие символы Методы и свойства объекта RegExp() Статические свойства объекта RegExp() Строковые методы для работы с регулярными выражениями Введение Регулярные выражения — это формальный язык поиска и осуществления манипуляций с подстроками в тексте, задающий шаблон (образец) из символов и метасимволов и задающий правило поиска Создание регулярных выражений С помощью объекта new RegExp() <script type="text/javascript"> // Вариант первый var regTemplate = new RegExp(/шаблон/флаги); // Вариант второй var regTemplate = new RegExp('шаблон', ' флаги '); </script> С помощью регулярного выражения для поиска (pattern) <script type="text/javascript"> var regTemplate = /шаблон/флаги; </script> Флаги (способы поиска по шаблону) • g (global) — глобальный поиск соответствия по всей строке; • i (ignoreСase) — нечувствительность к регистру; • m (multiline) — многострочный поиск Глобальный поиск: var regTemplate = /be/; var str = 'To be, or not to be '; //Найдёт только первое вхождение строки var regTemplate = /be/g; var str = 'To be, or not to be '; //Найдёт все вхождения строки Нечувствительность к регистру: var regTemplate = /be/; var str = 'TO BE OR NOT TO BE'; //Не найдет вхождений, если строка находится в другом регистре var regTemplate = /be/i; var str = 'TO BE OR NOT TO BE'; //Найдёт все вхождение строки, не смотря на регистр Флаги (способы поиска по шаблону) Опция многострочного поиска позволяет проводить сопоставление с образцом строкового выражения, состоящего из нескольких строк текста, соединенных символами разрыва строки. По умолчанию, сопоставление с образцом прекращается, если найден символ разрыва строки Многострочный поиск: var regTemplate = /^[\w\, ]+not[\w\, ]+$/; var str = 'To be, \r\n or not to be '; // Не найдёт совпадений var regTemplate = /^[\w\, ]+not[\w\, ]+$/m; var str = 'To be , \r\n or not to be '; //Найдёт все вхождения строки Многострочный поиск работает только если в шаблоне указаны начало строки «^» и конец строки «$» Метасимволы Сокращённый оператор Значение [abc] Любой из перечисленных в скобках символов, либо диапазона символов [^abc] Любой символ, кроме перечисленных в скобках, либо диапазона символов . Любой символ, кроме символа перехода на новую строку ^ Соответствует позиции в начале строки, в которой выполняется поиск $ Соответствует позиции в конце строки, в которой выполняется поиск | Указывает на возможность выбора одного из двух или нескольких элементов () Отмечает начало и конец части выражения. Части выражения можно сохранять для последующего использования Если в проверяемой строке имеются символы, схожие с метасимволами, то их необходимо экранировать символом «/». Например, для строки «100$» следует создать выражение /^100\$$/ Специальные символы Сокращённый оператор Значение \d Цифра. Эквивалентно [0-9] \D Любой символ, кроме цифр. Эквивалентно [^0-9] \w Цифра, буква (латинский алфавит) или знак подчеркивания. Эквивалентно [0-9a-zA-Z_] \W Любой символ, кроме цифр, букв (латинский алфавит) и знака подчеркивания. Эквивалентно [^0-9a-zA-Z_] \s Пробельный символ (пробел, табуляция, перевод строки и т. п.) \S Любой символ, кроме пробельных \b Граница слова, т. е. позиция между словом и пробелом или переводом строки \B Любая позиция кроме границы слова [\b] Символ возврата на одну позицию \xhh Символ с кодом hh (2 шестнадцатиричных цифры) \uhhhh Символ с кодом hh (4 шестнадцатиричных цифры) Квантификаторы повторения Параметр Значение {m, n} Повторение предшествующего элемента от m до n раз {m, } Повторение предшествующего элемента m или более раз {m} Повторение предшествующего элемента m раз * Соответствует предыдущему символу или части выражения, повторяющимся ноль или более раз. Аналогично параметру {0,} + Соответствует предыдущему символу или части выражения, повторяющимся один или более раз. Аналогично параметру {1,} ? Соответствует предыдущему символу или части выражения, повторяющимся ноль или один раз. Аналогично параметру {0,1} Позиционные проверки Параметр (?:m) Значение Находит соответствие, но не запоминает найденное m(?=n) Поиск с «заглядыванием вперёд». Находит m только если за m следует n m(?!n) Поиск с «заглядыванием вперёд». Находит m только если за m не следует n Управляющие символы Символ Значение \n Переход на новую строку \r Возврат каретки \f Конец страницы \t Горизонтальная табуляция \v Вертикальная табуляция Методы и свойства объекта RegExp() Методы объекта RegExp() toString() — Проверка соответствия строки данному выражению var regTemplate = /^be$/; alert(regTemplate. toString()); //Выведет строку регулярного выражения «^be$» test() — вывод строкового представления объекта var regTemplate = /^be$/; alert(regTemplate.test('be')); //Выведет true, т. к. строка соответствует шаблону alert(regTemplate.test('not be')); //Выведет false, т. к. строка НЕ соответствует шаблону exec() — возвращает объект результатов совпадений или «null», если ничего не найдено var regTemplate = /(be).+(be)/g; var str = 'To be or not to be'; //Не найдет вхождений, если строка находится в другом регистре var result = regTemplate.exec(str); // result[0] = 'be, or not to be'; — строка соответствия // result[1] = 'be'; — строка соответствия // result[2] = 'be'; — строка соответствия // result[index] = 3; — позиция первого вхождения строки соответствия // result[lastIndex] = 19; — позиция последнего вхождения строки соответствия (только в IE) Методы и свойства объекта RegExp() Свойства объекта RegExp() Свойство global ignoreCase Значение Логическое значение, указывающее, установлен ли флаг глобальности Логическое значение, указывающее, установлен ли флаг чувствительности к регистру multiline Логическое значение, указывающее, установлен ли флаг многострочности lastIndex Индекс последнего совпадения source Строковая форма регулярного выражения Статические свойства объекта RegExp() Свойство Альтерн. форма $$ — Экранированный знак доллара $1, $2 … $9 — Строки, соответствующие первым девяти подвыражениям в скобках для последнего найденного соответствия шаблону index — Значение индекса первого символа в строке, с которого начинается соответствие шаблону. Не является частью стандарта ECMA input $_ Строка, используемая для сравнения с данным шаблоном по умолчанию lastIndex — Целочисленное значение, указывающее позицию в строке, с которой будет начинаться следующий поиск lastMatch $& Строка с соответствующим шаблону текстом, найденному в результате последней операции сравнения lastParen $+ Строка, соответствующая последнему заключённому в скобки подвыражению для последнего найденного соответствия шаблону leftContext $` Строка с текстом, размещённым слева от последнего найденного соответствия шаблону rightContext $' Строка с текстом, размещённым справа от последнего найденного соответствия шаблону Значение Строковые методы для работы с регулярными выражениями Свойство search() split() Значение Возвращает индекс символа, с которого начинается первое обнаружение соответствия шаблону Разделяет строку на массив подстрок replace() Возвращает строку, полученную в результате замены текста match() Возвращает массив результатов сравнения Задание • Запросите у пользователя мобильный номер телефона: o Номер должен начинаться с «+7» или «8»; o Следующие три цифры могут быть в скобках, могут или без; o Остальные группы цифр могут не разделяться, или разделяться знаком «-» или пробелом. Напр. xxx-xx-xx, xxx xx xx или xxxxxxx; o Если номер введён верно — выведите его, если нет — снова запросите ввести его, отобразив в вызове неправильное значение. Выведенный номер должен начинаться с «+7» и логически разделяться пробелами, напр. +7 123 456 78 90