Задача: получить url адрес из строки
Пример строки:
[cc lang=»ActionScript3″]str=’‘; [/cc] Решение:
[cc lang=»ActionScript3″]var url:RegExp =new RegExp(‘[\\w]*:\/\/[\\w.\/]*’);[/cc] Принцип работы:
Регулярные выражения позволяют получить из текста его часть, соответствующую определённому шаблону.
Создание регулярного выражения выглядит так: [cc lang=»ActionScript3″]var exp:RegExp =new RegExp(»);[/cc] В кавычках записывается шаблон.
А применяется к строке так:
String.match(exp); Возвращаеться массив, в элементе с нулевым индексом будет полное совпадение шаблону, а в послежующих совпадения уж по группировкам между ( и ). См далее.
Узнавать ссылка перед нами или нет, будем по наличию разделителя ://
Т.е. до может быть что угодно (протокол)
Ну и после непосредственно адрес до кавычек.
1. В регулярных выражениях слэши(/) надо экранировать (т.е. ставить перед каждым слэшем обратный слэш — \)
Грубо говоря регулярные выражения выполняються так, как будто их читает человек, т.е. слева направо символ за символом.
И так [\\w]* наличие скобок указывает на группировку, т.е. на конкретном месте в строке может быть символ, который указан в скобках, в нашем случае \\w означает любую букву алфавита. Звёздочка(*) после скобок говорит о том что может быть любое количество символов, соответствующих группе [\\w], что бы, к примеру, таких символов было лишь 3 следует записать: [\\w]{3}
Далее идёт разграничитель :// в заэкраннированном виде выглядит так: :\/\/
После разграничителя у нас так же может быть любое количество символов, но за исключением что в адресе кроме букв, присутствуют точки и слэши? Их необходимо добавить в допустимую группу: [\\w.\/]
Усложним пример, допустим нам требуются ссылки только с протоколом http или ftp:
Тогда вместо группы с доступными символами [] мы должны прописать возможные значения группы символов (попроту говоря возможные значения строки) (http|ftp)
Итоговое выражение будет иметь следующий вид: [cc lang=»ActionScript3″]RegExp(‘(http|ftp):\/\/[\\w.\/]*’);[/cc] Плюшки на этом не кончились, это только малая часть. Вот ещё фишка: допустим нам надо получить в результате отдельно протокол и отдельно адрес, без протокола, для этого нужное заклюячаем так же в скобки. Протокол у нас и так группируется (http|ftp) осталось сгруппировать адрес: что после разделителя заключаем в скобки ([\\w.\/]*) результат: [cc lang=»ActionScript3″]RegExp(‘(http|ftp):\/\/([\\w.\/]*)’)[/cc] Полный код:
[cc lang=»ActionScript3″]var str:String;
str=’‘;
var m:Array=new Array();
var url:RegExp =new RegExp(‘(http|ftp):\/\/([\\w.\/]*)’);
m=str.match(url);
trace(m[0]); //—выведет http://mail.ru/image.jpg
trace(m[1]); //—выведет http
trace(m[2]); //—выведет mail.ru/image.jpg
[/cc] Ничего сложного.
[ratings]