Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
JavaScript_2009.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
1.16 Mб
Скачать

Var re, str, protocol, address, filename, result;

str = "http://www.somedomain.ru/index2.html"

re = new RegExp("((\w+):\/\/)?([^\/]+)(.*)?", "i");

result = re.exec(str);

if (result != null)

{

protocol = RegExp.$2;

address = RegExp.$3;

filename = RegExp.$4;

...

}

Здесь для доступа к результату применения регулярного выражения используется глобальный объект RegExp. Свойство RegExp.$n –позволяет нам получить подвыражение, сохранённое в круглых скобках. Подвыражения в скобках нумеруются в слева направо.

В регулярном выражении мы использовали вложенные друг в друга подвыражения. В этом случае из них сохраняется сначала внешнее, а затем внутреннее. Это нами сделано для того, чтобы выделить из группы символов "http://" обозначение протокола "http". А группу "http://", сохраненную под номером 1, можно просто потом не использовать.

Строка result = re.exec(str) запускает "разборку".

С помощью условного оператора if (result != null)……… проверяем, совпало ли наше регулярное выражение с исходной строкой, то есть правилен ли наш WEB-адрес.

Regular Expressions

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

Регулярное выражение в JavaScript – это объект класса RegExp. Соответственно, создаются они так:

var re = new RegExp(’str’, ’i’);

Здесь ‘str’ – шаблон для поиска, а ‘i’ – так называемый модификатор. Модификаторы задают некоторые параметры поиска. Так, в данном случае модификатор /i указывает, что поиск будет производиться без учёта регистра. Поэтому re совпадёт как со строкой ‘str’, так и со строкой ‘StR’. Без модификатора /i вторая подстрока не соответствовала бы шаблону.

Для создания объектов RegExp можно использовать упрощенный синтаксис:

var re = /str/i;

Пример Js40

Рассмотрим, как применять регулярные выражения для поиска подстрок. Метод класса String search производит поиск совпадения с регулярным выражением, возвращая индекс начала совпадения или -1, если подстрока не найдена. Так, код

var re = /str/i;

var st = " String where substring is searched.";

var s = "Does not match";

alert(st.search(re) + ' ' + s.search(re));

выведет

Заметим, что поиск в строке st даёт 1 (String), а не 17 (substring), то есть ищется именно первое совпадение. Если же совпадения нет, возвращается -1, что видно на примере поиска в строке s.

Пример Js38

Метод match также ищет подстроку, совпадающую с шаблоном, но возвращает массив, содержащий совпадения, или null, если совпадений нет. Так, код

var re = /str/i;

var st = " String where substring is searched.";

var s = "Does not match";

alert(st.match(re) + ' ' + s.match(re));

покажет

Пример Js39

Заметим, что опять возвращено только первое совпадение. Чтобы найти все, необходимо указать модификатор /g:

var re = /str/ig;

var st = " String where substring is searched.";

var s = "Does not match";

alert(st.match(re) + ' ' + s.match(re));

Тогда результат будет следующим:

Пример Js41

Далее, метод replace заменяет найденные соответствия указываемой подстрокой. К примеру,

var re = /str/ig;

var st = " String where substring is searched.";

var s = "Does not match";

alert(st.replace(re, "STR") + ' ' + s.replace(re, "STR"));

выведет

Пример Js42

Наконец, метод split производит разбиение строки по подстрокам, соответствующим шаблону. Например,

var re = /,/;

var st = "comma,separated,values";

alert(st.split(re)[2]);

выведет

st.split(re) создаёт массив [‘comma’, ‘separated’, ‘values’], разбивая строку по запятой, так как именно запятая совпадает с шаблоном re, затем выводится последний элемент этого массива.

Пример Js43

Помимо методов класса String можно пользоваться методами класса RegExp exec и test. Первый возвращает массив, содержащий подстроку, совпадающую с шаблоном, что очень похоже на поведение match с регулярным выражением в отсутствие модификатора /g. Второй просто возвращает логическое значение, сигнализирующее, есть ли совпадение. Так, пример

var re = /str/ig;

var st = " String where substring is searched.";

var s = "Does not match";

alert(re.exec(st) + ' ' + re.exec(s) + '\n' + re.test(st) + ' ' + re.test(s));

выведет

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]