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

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

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

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

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

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


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

Автор: Denisido

Дата: 2010-07-31

Написание регулярных выражений

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

Запустить!
var text = 'облицовка стен';
var regex = /лицо/;             // вводим шаблон
var result = text.match(regex); // ищем наш шаблон в строке
alert(result);  //выведет четыре стоящих подряд буквы л и ц о

Что касается метасимволов, то они делятся на несколько типов и выполняют разные функции, например якорные метасимволы, которые бывают простыми и сложными. Они выявляют позицию в строке, а не ищут определенные символьные знаки. Рассмотрим пример простого метасимвольного якоря, который будет определять начало и/или конец строки:

Запустить!
var text = 'лицо компании - наш бренд';
var regex = /^лицо/;             // вводим шаблон
var result = text.match(regex);  // ищем наш шаблон в строке
alert(result);                   // выведет лицо

В этом примере мы применили простой якорный метасимвол циркумфлекс - ˆ, который обозначает начало строки. В этом случае, если идет начало строки, за которым следует четыре последовательных буквы л и ц о, то наш шаблон совпадает, в противном случае - нет:

Запустить!
var text = 'первое лицо компании - президент';
var regex = /^лицо/;            // вводим шаблон
var result = text.match(regex); // ищем наш шаблон в строке
if (result == null) {
                     alert('Совпадений с шаблоном не найдено');
                    }
else {alert(result);};
/* Еще пример с окончанием проверяемой строки */
var text = 'лицо';
// символ доллара ($) - обозначает в RE конец строки
var regex = /^лицо$/;           // вводим шаблон
var result = text.match(regex); // ищем наш шаблон в строке
/* шаблон будет найден, так как он совпадает с началом строки за которым сразу следуют четыре последовательных буквенных символа лицо и далее это дело завершается  концом строки */

Эти и другие моменты будут рассматриваться нами постепенно.

Символьные классы

Символьный класс обозначается в виде квадратных скобок [ ], внутри которых перечисляются символы для поиска. Например, слова галоша и калоша по смыслу и правописанию одинаковые, и в тексте могут встречаться оба варианта. Для того, чтобы отыскать оба варианта нам понадобится символьный класс [гк], который совпадает с одним символом из всех возможных. Чтобы вам легче было это понять используйте связку или (выбрать или г или к):

Запустить!
var text = 'русские калоши';
var regex = /[гк]алоши$/;       // вводим шаблон
var result = text.match(regex); // ищем наш шаблон в строке
alert(result);                  // выведет калоши

Обратите внимание на знак доллара в конце шаблона в регулярном выражении (RE). Мы вставили его, чтобы еще раз показать, что слово калоша или галоша должно находиться в самом конце строки и за ним не может быть никаких других символов.

Стоит отметить, что количество символов в символьном классе может быть любым. К примеру чтобы отыскать на странице заголовки от h1 до h4 нам необходимо прописать следующее:

  
// находим все заголовки от h1 до h4
var regex = //;
  

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

  
var regex = //;  // находим 

 

Стоит предположить, что теперь, на основе вышеуказанного примера, запись в виде [0-9] вам будет понятна, а если нет, то поясним, что такая запись означает совпадение с любым числовым знаком. Сокращенная запись для любой цифры - \d. Соответственно, запись [а-я] будет соответствовать любой букве русского алфавита в нижнем регистре. Стоит отметить, что существует сокращенная запись любого знака, входящего в слово в виде символа \w, но сразу оговоримся, что он не поддерживает Юникода и не находит русский текст. Тем не менее посмотрим пример:

Запустить!
var text = 'Наша команда заняла 1 место по прыжкам в высоту';
var regex = /[0-9]/;            // вводим шаблон
var result = text.match(regex); // ищем наш шаблон в строке
alert(result);                  // выведет 1
Запустить!
var text = 'Наша команда заняла 1 место по прыжкам в высоту';
var regex = /[а-я]/;            // вводим шаблон
var result = text.match(regex); // ищем наш шаблон в строке
alert(result);                  // выведет а

Последний пример ярко выражает поиск шаблона в нижнем регистре, как вы заметили, вывелась не первая, а вторая буква, т.к. строка начинается с заглавной буквы Н. Если бы мы применили к шаблону знак циркумфлекса (^), то в результате ничего бы не нашли. Чтобы исправить это нам нужно прописать так: [а-яА-Я]. Давайте попробуем найти три последовательные буквы сразу после начала строки:

Запустить!
var text = 'Наша команда заняла 1 место по прыжкам в высоту';
var regex = /^[а-яА-Я][а-я][а-я]/; // позже вы узнаете как сократить такую запись
var result = text.match(regex);    // ищем наш шаблон в строке
alert(result);                     // выведет Наш

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

В отличие от простого символьного класса (СК), инвертированный класс ищет любое совпадение символов не входящих в список внутри квадратных скобок, где префиксом является знак циркумфлекса [^]. Этот знак играет особую роль в символьных классах - инверсию:

Запустить!
var text = '0123456789';
var regex = /[^0-46-9]/;         // вводим шаблон на поиск чисел не входящих в СК
var result = text.match(regex);  // ищем наш шаблон в строке
alert(result);                   // выведет 5

Как мы успели заметить выше, чтобы найти дефис в символьном классе, необходимо в квадратных скобках поставить его самым первым, если же вы ищите знак циркумфлекса, то тут все наоборот - не ставьте его первым в символьный класс!

Запустить!
var text = 'пол-лимона';
var regex = /пол[-а-я]/;            // вводим шаблон на поиск
var result = text.match(regex);     // ищем наш шаблон в строке
alert(result);                      // выведет пол-

var text2 = 'пола';
var regex2 = /пол[-а-я]/;           // вводим шаблон на поиск
var result2 = text2.match(regex2);  // ищем наш шаблон в строке
alert(result2);                     // выведет пола

var text3 = 'п^ола';
var regex3 = /[к^]/;                // вводим шаблон на поиск
var result3 = text3.match(regex3);  // ищем наш шаблон в строке
alert(result3);                     // выведет ^



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



Коментарии:

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

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

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

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

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

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