Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Объект Regular Expression




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

Функции работы с подстроками позволяют выполнить операции поиска подстрок в строке и замены подстрок в строке. Однако при работе с данными часто приходится выполнять операции поиска и замены по довольно сложным алгоритмам, например, найти первое вхождение цифры в строке. Хотя такие операции можно выполнить, используя функции работы со строками, условные операторы и операторы цикла, существует более удобный способ решения подобного рода задач – использование регулярных выражений.

Впервые регулярные выражения стали использоваться в командном интерпретаторе и утилитах операционной системы Unix. Первым языком программирования, в который были введены средства работы с регулярными выражениями, стал язык Perl.

В последние версии языка JavaScript также введены средства работы с регулярными выражениями.

Помимо Perl и JavaScript, возможность использования регулярных выражений появилась в последних версиях языков Java, VBScript и PHP. Средства работы с регулярными выражениями в этих языках практически совпадают, поэтому рассматриваемый ниже материал может быть использован при написании программ или сценариев с использованием этих языков.

Регулярные выражения используются для решения следующих задач:

· проверки данных на наличие некоторой последовательности данных, заданных с помощью определенного образца, называемого шаблоном (pattern);

· замены или удаления данных.

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

Объект Regular Expression содержит шаблон, а также опции, которые используются при поиске строки. Объект может быть создан одним из двух способов:

var имя-переменной = / шаблон / [ опции ]

или

var имя-переменной = new RegExp(" шаблон "[," опции "]).

В первом случае объект для заданного шаблона создается напрямую.

Во втором случае создание объекта выполняется с помощью создания экземпляра встроенного объекта RegExp, рассматриваемого в следующем разделе.

Параметр шаблон содержит шаблон регулярного выражения. В простейшем случае шаблон представляет собой строку, которую надо найти или заменить в строке поиска, например, шаблон "Иванов" означает поиск или замену строки Иванов в строке поиска.

Необязательный параметр опции содержит следующие опции:

· g – глобальный поиск;

· i – поиск без учета регистра символов;

· m – поиск в нескольких строках.

Глобальный поиск предполагает поиск всех соответствий шаблону в строке (по умолчанию выполняется поиск только первого соответствия).

Поиск без учета регистра символов означает, что регистр символов в шаблоне игнорируется, т.е. строки "поиск", "Поиск" и "ПОИСК" будут соответствовать шаблону "поиск" (по умолчанию шаблону будет соответствовать только первая строка).

Поиск соответствий шаблону для шаблонов, зависящих от положения в строке (в начале или в конце строки), выполняется во всех строках внутри строки (по умолчанию такой поиск выполняется только в первой строке). Строки внутри строки задаются с помощью символа "\n".

В параметре опции могут быть заданы одна или несколько из перечисленных опций в любом порядке как строка символов (без пробелов и запятых между опциями).

Перед использованием параметр шаблон преобразуется во внутренний формат. При использовании первого способа такое преобразование выполняется при загрузке сценария, поэтому первый способ используется, когда известно, что шаблон не будет меняться во время работы сценария. Если же шаблон является динамическим, т.е. может изменяться в процессе выполнения сценария, то используется второй способ, поскольку при его использовании шаблон загружается либо непосредственно перед его выполнением, либо при вызове метода compile().

 

Пример 4.4.73. Создание объекта для шаблона:

1. var re1 = /abc/i;

Переменная re1 задает поиск или замену для шаблона /abc/ без учета регистра, т.е. такое задание эквивалентно заданию группы следующих шаблонов: "abc", "ABC", "abC", "aBC", "aBc", "Abc", "ABc" и "AbC".

2. var re2 = new RegExp("34","g");

Переменная re2 задает поиск или замену для всех соответствий шаблону /34/ в строке.

 

Объект Regular Expression имеет следующие свойства:

· global, ignoreCase и multiline – возвращает соответственно состояние опций g, i и m (включена – true или выключена – false) (только для чтения);

· source – содержит копию строки шаблона регулярного выражения (только для чтения);

· lastIndex – возвращает позицию того символа в строке, с которой начнется следующий поиск соответствия исходной строки шаблону или -1, если соответствие не найдено (это свойство можно изменять с помощью функций exec() и test() объекта Regular Expression, а также с помощью функций match(), replace() и split() встроенного объекта String).

 

Пример 4.4.74. Использование свойств объекта Regular Expression:

Следующий фрагмент сценария:

// Вывод свойств re1

alert("re1.global=" + re1.global +

"\nre1.multiline=" + re1.multiline +

"\nre1.ignoreCase=" + re1.ignoreCase +

"\nre1.source='" + re1.source + "'");

// Вывод свойств re2

alert("re2.global=" + re2.global +

"\nre2.multiline=" + re2.multiline +

"\nre2.ignoreCase=" + re2.ignoreCase +

"\nre2.source='" + re2.source + "'");

выводит свойства объявленных в примере 4.4.73 переменных re1 и re2:

 

Объект Regular Expression содержит также три встроенные функции: test(), exec() и compile().

Функция

test(строка)

возвращает true, если шаблон объекта Regular Expression содержится в строке и false – в противном случае.

 

Пример 4.4.75. Использование функции test()объекта Regular Expression:

re3 = /Internet/g; // Шаблон глобального поиска

// Поиск слова Internet в первой строке

isEnglishWord = re3.test("Технологии Internet (обзор)");

// Вывод значения переменной isEnglishWord

// и значения свойства lastIndex

alert("isEnglishWord=" + isEnglishWord +

"\nre3.lastIndex=" + re3.lastIndex);

// Поиск слова Internet во второй строке

isRussianWord = re3.test("Технологии Интернет (обзор)");

// Вывод значения переменной isRussianWord

// и значения свойства lastIndex

alert("isRussianWord=" + isRussianWord +

"\nre3.lastIndex=" + re3.lastIndex);

re3_1 = /Internet/; // Шаблон одиночного поиска

// Поиск слова Internet в первой строке

isEnglishWord = re3_1.test("Технологии Internet (обзор)");

// Вывод значения переменной isEnglishWord

// и значения свойства lastIndex

alert("isEnglishWord=" + isEnglishWord +

"\nre3_1.lastIndex=" + re3_1.lastIndex);

Вывод этого фрагмента сценария будет иметь следующий вид:

    (в Internet Explorer) (в Firefox и других Web-браузерах)

Если в шаблоне установлен глобальный поиск (опция g), то в случае, если шаблон объекта найден в строке, свойство lastIndex содержит значение индекса символа, следующего за найденным шаблоном (пробела после слова Internet). Если шаблон не найден, свойство lastIndex содержит значение. Если опция g для шаблона не установлена, значение lastIndex всегда равно 0 для всех Web-браузеров, кроме Internet Explorer.

Функция

exec(строка)

выполняет поиск в строке с использованием шаблона. Если шаблон, не найден в строке, функция возвращает значение null. В противном случае функция возвращает переменную, содержащую результат поиска соответствия шаблону. Если в шаблоне поиска установлена опция g, то каждый следующий поиск начинается с позиции в строке, соответствующей текущему значению свойства lastIndex, в противном случае каждый поиск начинается с начала строки.

Возвращаемое функцией в результате поиска значение имеет два свойства: свойство index, содержащее позицию начала найденного соответствия шаблону (первая позиция в строке равна 0) и свойство input, содержащее исходную строку, в которой производится поиск.

 

Пример 4.4.76. Использование функции exec()объекта Regular Expression:

// Исходная строка

inputString = "Компьютерная сеть - это компьютеры, " +

"связное оборудование и каналы связи.";

// Определение шаблона

var re4 = /компьютер/gi;

// Первый вызов exec()

var reArray = re4.exec(inputString);

// Вывод свойства input для результата

alert("Исходная строка='" + reArray.input +"'");

// Объявление переменной цикла

var i;

// Поиск всех соответствий шаблону в цикле

for (i = 0;reArray!= null;i++)

{

// Вывод текущих значений

// свойств index и lastIndex результата

alert("index[" + i + "]=" + re4.index +

" lastIndex[" + i + "]=" + re4.lastIndex +

" result[" + i + "]='" + reArray + "'");

// Следующие вызовы exec()

reArray = re4.exec(inputString);

}

// Вывод количества вхождений

// строки шаблона в исходной строке

alert("Количество вхождений строки '" + re4.source +

"' равно " + i);

В результате работы фрагмента на экран будут выведены следующие сообщения:

 

Функция

compile(" шаблон "[," опции "])

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

 

Пример 4.4.77. Использование функции compile() объекта Regular Expression:

Пример использования функции compile().

Если в примере 4.4.75 после определения шаблона re4 добавить предложение

// Компиляция шаблона

re4.compile("компьютер", "ig");

то цикл поиска соответствий шаблону в строке будет выполняться быстрее.




Поделиться с друзьями:


Дата добавления: 2014-01-05; Просмотров: 306; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.039 сек.