Если вам нужно использовать регулярные выражения при создании сайта, вовсе не обязательно прибегать к использованию Perl или PHP, — JavaScript вполне может справится с этой работой. В этой статье мы рассмотрим объект RegExp в JavaScript и его методы. Я уверен, что после прочтения, JaveScript представится вам в другом свете.
Настоящий Мир
Большинство Настоящих Программистов относятся к JavaScript, словно к бедной родственнице из деревни — иногда полезна, но не очень важна. Настоящих Программистов не интересует язык, чье предназначение в том, чтобы заменять одно изображение другим или рисовать след за мышью по веб-странице. У Настоящих Программистов есть более важные дела.
Что ж, JavaScript ограничен стороной клиента в веб-транзакции, но на этой территории, он безусловный король. Нет языка, настолько простого к изучению или дающего возможность сделать столько полезных вещей с минимальными усилиями. И одно из того, что вы можете делать, это использовать регулярные выражения.
По ходу этой статьи, я собираюсь дать вам представление о регулярных выражениях в контексте JavaScript. Я покажу, как использовать объект String в JavaScript для простейших возможностей поиска соответствия или осуществления замены, так же, как и для более сложных действий со строками. И я представлю вам объект RegExp, который предоставляет удобный путь для создания более эффективного кода распространенной проверки входящих данных на стороне клиента. Итак, приступим; независимо от того, Настоящий ли вы Программист, или только пытаетесь им стать, я уверен, что вы найдете для себя кое-что полезное ниже.
ОПИСАНИЕ. На странице устанавливается фрейм, который скрыто для посетителей открывает другую страницу(страница в странице). При этом посетитель не видит открываемой страницы. Увидеть загрузку дополнительной страницы возможно только в статусной строке.
Синтаксис var newWin = window.open(strUrl, winName [, winParams]) Аргументы
strUrl Адрес для загрузки в новое окно, любая адресная строка, которую поддерживает браузер winName Имя нового окна для использования в параметре target форм и ссылок winParams Необязательный список настроек, с которыми открывать новое окно
На сегодняшний день в интернете существует несколько разновидностей Lightbox, которые можно классифицировать по нескольким основаниям:
По типу фреймовика:
Lightbox на jQuery; Lightbox на Mootools; Lightbox на Prototype; Lightbox на Dojo; Lightbox на Toolkit; и другие.
По характеру предзагрузки изображений:
Lightbox, загружающий полностью все изображения после полной загрузки DOM, смена изображений происходит в результате замены атрибута src; Lightbox, загружающий только миниизображения, увеличенные копии загружаются путём создания нового объекта Image; Lightbox, использующий ajax предзагрузку изображений, и последующее их добавление в процессе использования элементов управления галереи.
По использованию эффектов:
Lightbox, использующий эффекты, как правило, созданные jQuery и др. подобными библиотеками; Lightbox, не использующий эффекты.
Под словом в данном скрипте понимается любая последовательность символов, не являющаяся пробелами или знаками окончания строк. Текст скрипта на javacript:
function isWhiteSymbol(symb) { var ret = false; switch(symb) { case " ": case "": case"\n": case "\r": ret = true; default: } return ret; }
Регулярные выражения представляют собой образцы для поиска заданных комбинаций символов в текстовых строках (такой поиск называется сопоставлением с образцом). Существует два способа присваивания переменным регулярных выражений, а именно: Использование инициализатора объекта: var re = /pattern/switch?. Использование конструктора RegExp: var re = new RegExp("pattern"[,"switch"]?). Здесь pattern - регулярное выражение, а switch - необязательные опции поиска.
Инициализаторы объекта, например, var re = /ab+c/, следует применять в тех случаях, когда значение регулярного выражения остается неизменным во время работы сценария. Такие регулярные выражения компилируются в процессе загрузки сценария и, следовательно, выполняются быстрее.
Вызов конструктора, например, var re = new RegExp("ab+c"), следует применять в тех случаях, когда значение переменной будет меняться. Если вы собираетесь использовать регулярное выражение несколько раз, то имеет смысл скомпилировать его методом compile для более эффективного поиска образцов.
При создании регулярного выражения следует учитывать, что заключение его в кавычки влечет за собой необходимость использовать escape-последовательности, как и в любой другой строковой константе. Например, следующие два выражения эквивалентны:
var re = /\w+/g;
var re = new RegExp("\\w+", "g"); // В строке "\" должно заменяться на "\\"
Примечание: регулярное выражение не может быть пустым: два символа // подряд задают начало комментария. Поэтому для задания пустого регулярного выражения используйте выражение /.?/.
Регулярные выражения используются методами exec и test объекта RegExp и методами match, replace, search и split объекта String. Если нам нужно просто проверить, содержит ли данная строка подстроку, соответствующую образцу, то используются методы test или search. Если же нам необходимо извлечь подстроку (или подстроки), соответствующие образцу, то нам придется воспользоваться методами exec или match. Метод replace обеспечивает поиск заданной подстроки и замены ее на другую строку, а метод split позволяет разбить строку на несколько подстрок, основываясь на регулярном выражении или обычной текстовой строке. Более подробные сведения о применении регулярных выражений приведены в описании соответствующих методов.
nternet Explorer, Firefox, Opera, Chrome, Safari, Netscape, Konqueror, Avant, Dillo... и это только некоторые из ныне доступных браузеров пользователю. Что же в этом плохого?
В "идеальном" мире есть утвержденные веб стандарты, которых придерживаются все разработчики браузеров. Это значит, что на один и тот же правильно написанный тобою HTML код (или CSS код, или JS), каждый из браузеров реагирует одинаково. Но в реальном мире у разработчиков браузеров преобладает мнение, что стандарты — это для далекого розового будущего и когда оно придет они начнут их придерживаться. А сейчас иногда браузеры позволяют совершенно непредсказуемо реагировать на код.
Тебе остается для таких "иногда" научиться точно определять браузер и применять к нему особые меры. Задача
При помощи JavaScript определить браузер и его версию (без использования дополнительных библиотек). Метод навигатора Теория
Среди объектов javascript есть объект navigator, у которого доступен метод UserAgent. Этот метод вернет строку, в которой содержится информация о браузере, его версии, ядре, операционной системе, в которой он запущен, а так же некоторых агентах и службах, встроенных в него. Примеры UserAgent:
* Opera/9.64 (Windows NT 5.1; U; ru) Presto/2.1.1 * Mozilla/5.0 (X11; U; Linux i686; it-IT; rv:1.9.0.2) Gecko/2008092313 Ubuntu/9.25 (jaunty) Firefox/3.8 * Mozilla/5.0 (Windows; U; MSIE 7.0; Windows NT 6.0; el-GR)
Решение
Т.к. UserAgent возращает имя браузера и его версию для разных браузеров однотипно, поэтому можно составить регулярное выражение для получения нужной информации. Допустим UserAgent вернул такую строку:
Opera/9.64 (Windows NT 5.1; U; ru) Presto/2.1.1
В этой строке нужная информация — это Opera/9.64. Парсим строку и "вытаскиваем" нужное:
В новых браузерах для перемещения по DOM-дереву появилась возможность использовать интерфейс «Element Traversal», который позволяет искать элементы, исключая текстовые узлы так, как это происходит в Internet Explorer, при использовании стандартных firstChild, lastChild, nextSibling и previousSibling, что увеличивает скорость поиска элементов.
В браузерах, поддерживающих «Element Traversal», доступны новые методы:
* firstElementChild — первый дочерний элементы; * lastElementChild — последний дочерний элементы; * nextElementSibling — следующий элементы; * previousElementSibling — предыдущий элементы; * childElementCount — количество дочерних элементов.
Эти методы работают с узлами, у которых nodeType == 1, например, метод childElementCount показывает не сколько всего дочерних узлов, а количество дочерних элементов, т. е. узлов с nodeType == 1.