Веб-программирование

Обучение программированию

Делаете первые шаги в программировании? Представляем вашему вниманию пошаговое обучение самостоятельного создания сайтов любой сложности на примерах! На страницах сайта KobRU вы найдете все самое необходимое, для того чтобы по праву считаться веб-мастером по созданию привлекательных динамически изменяемых интернет-страниц, используя основные инструменты веб-разработчиков: HTML; CSS; PHP; MySQL; JAVASCRIPT и другие. Сайт KobRU - наиболее полное и качественно структурированное руководство с предельно понятными пояснениями и поэтапным изложением материала, который поможет вам в совершенстве овладеть искусством программирования. Добавьте динамики и интерактивность в свои веб-проекты!

Вход в личный кабинет

Забыли пароль?

Не зарегистрированны?


Конструкторское Web-бюро
8.03.4 Объект RegExp Часть IV

Автор: Denisido

Дата: 2010-08-19

Квантификаторы

Повторения в шаблонах

Допустим вам нужно проверить правильность ввода почтового индекса (на территории РФ), т.е. найти шесть цифровых символов последовательно следующих друг за другом. Каким образом вы собираетесь решить эту задачу? Ранее мы говорили, что символьный класс [0-9] совпадает с любым цифровым символом, который в другом варианте представлен укороченной записью в виде символа \d. Самое первое, что приходит в голову - напечатать шесть таких символов подряд:

var regex = /\d\d\d\d\d\d/ig;    // вводим шаблон на поиск

Решение выполнено, но с большим напряжением при вводе, так как вам нужно пересчитать все символы \d, чтобы не ошибиться. А если их на порядок больше? Что тогда? К счастью, выход есть! Фиксированное число совпадений в шаблоне можно записать с помощью квантификатора { }. В нашем случае это будет выглядеть так:

var regex = /\d{6}/ig;    // вводим шаблон на поиск
  
// Замечание: \d{1}совпадает с \d, а \d{0} - равносильно удалению из шаблона!

Теперь добавим символ границ \b, чтобы быть точными в поиске совпадений при вводе в форму

Запустить!
var regex = /\b\d{6}\b/ig;    // вводим шаблон на поиск

Для того чтобы найти, к примеру, совпадения от 3 до 6 числовых символов, нужно записать так:

var regex = /\b\d{3,6}\b/ig;    // вводим шаблон на поиск
  
// Замечание: \d{3,3} эквивалентно выражению \d{3}

Такая конструкция называется интервальным квантификатором, которая указывает на явное определение минимального и максимального количества совпавших метасимволов.

Бесконечное число повторений в шаблоне (квантификаторы + и *)

Если вам нужно найти переменное количество повторений, без указания верхней планки, например, от одного повторения и выше, то запись будет следующей:

var regex = /\d{1,}/;    // вводим шаблон на поиск одной и более цифр

Здесь, на примере работы с цифрами мы написали шаблон на поиск от одной цифры и более. После символа \d поставили квантификатор { } в виде фигурных скобок, внутри которого записали в первый параметр обязательную цифру (в нашем случае 1 - количество обязательных повторений), далее после запятой не указали второй параметр на ограничение повторений, тем самым дали возможность искать бесконечное множество совпадений. Такую запись можно укоротить, используя квантификатор + :

var regex = /\d+/;    // вводим шаблон на поиск одной и более цифр
  
// Пояснение: \d{1,} эквивалентно выражению \d+

В отличие от примера выше, выражение \d{0,} совпадает с любым числом цифр, в том числе и с нулевым:

var regex = /\d{0,}/;    // вводим шаблон на поиск цифр ноль и более раз

Абсолютно то же самое делает выражение \d*. Символ звездочки означает совпадение с ноль и более раз и делает предшествующий элемент необязательным:

var regex = /\d*/;    // вводим шаблон на поиск цифр ноль и более раз
  
// Пояснение: \d{0,} эквивалентно выражению \d*

Необязательные элементы

Рассмотрим пример поиска слова картина и картинка. Эти слова абсолютно одинаковые по написанию, за исключением того, что в уменьшительно-ласкательном варианте присутствует лишняя буква к. Существует несколько способов нахождения этих слов. Самая длинная и тривиальная запись с использованием альтернатив:

var regex = /картина|картинка/;

Во втором варианте применим более компактную запись - интервальный квантификатор:

var regex = /картинк{0,1}а/;

А теперь укажем самый простой и укороченный способ:

var regex = /картинк?а/;

В нашем выражении картинк?а метасимвол ? в виде знака вопроса означает, что предшествующий ему символ является необязательным. Конструкция к? эквивалентна к{0,1}.

Чтобы закрепить материал и одновременно проверить все три варианта, перейдите на отличный сайт по нахождению регулярных выражений диалекта JavaScript в он-лайн варианте - www.regexpal.com/.

Максимальные и минимальные квантификаторы

Данные квантификаторы ищут абсолютно одинаковые совпадения в шаблоне, но только с разным подходом. Например, в выражении .* точке соответствует любой символ (любой!), за которым следуем квантификатор * (звездочка) с бесконечным числом повторений. Говоря другими словами, данный квантификатор съест все на своем пути. Такой квантификатор называют максимальным или жадным, так как он стремится захватить максимальное количество символов:

Запустить!
var text = '

регулярные выражения

Regex в JavaScript


'; var regex = /\.*\<\/p\>/mgi; var result = text.match(regex); alert(result);

В приведенном примере после нахождения открывающегося тега <p> максимальный квантификатор ищет все совпадения в строке до конца, включая тег переноса <br>. После чего механизм попытается найти соответствие символу < (знак меньше) в конце испытуемого текста. Как вы, скорее всего догадались, данная попытка не будет иметь успеха, тогда механизм регулярного выражения вернет один символ из своего совпадения. И так будет продолжаться до тех пор, пока не будет найдено необходимое совпадение. После успешного обнаружения, механизм будет пытаться искать соответствие с символом / (слэша). Этот процесс повторяется, пока элемент </p> не совпадет полностью.

Как видно из примера, максимальный квантификатор захватил сразу два обзаца. Для того, чтобы найти необходимое соответствие, которое содержится между открывающимся тегом абзаца <p> и закрывающимся тегом </p>, включая сами теги, нужно применить минимальный квантификатор. Любой квантификатор можно сделать минимальным, поставив в конец ? (знак вопроса):

Запустить!
var text = '

регулярные выражения

Regex в JavaScript


'; var regex = /\.*?\<\/p\>/mgi; var result = text.match(regex); alert(result[0]);

Если в максимальном квантификаторе порядок поиска на возможность совпадения осуществляется справа налево, то минимальный квантификатор ищет совпадения в обратном порядке - слева направо, и выполняет возвраты в другом режиме. После обнаружения открывающегося тега абзаца, минимальный квантификатор запоминает позицию для возврата. Далее ищет символ совпадающий с выражением, если не находит, делает возврат к сохранению и так далее, пока не обнаружит необходимое совпадение.



Оцените материал по 5-ти бальной шкале: 1 2 3 4 5



Коментарии:

Добавить новый коментарий:

Текст коментария:

Введите результат с картинки

Просмотров: 9179

Метки раздела JavaScript

Основы web программирования, var javascript, javascript функции, javascript обучение, javascript простые примеры, html javascript, javascript примеры, javascript random, уроки сайтостроения, java script, регулярные выражения, appendchild javascript, javascript бесплатно, javascript document write, javascript справочник, javascript примеры.