Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 14.02.2013, 18:32
Аспирант
Отправить личное сообщение для gJam Посмотреть профиль Найти все сообщения от gJam
 
Регистрация: 21.07.2011
Сообщений: 92

RegEx / Match
Добрый день!

В соседнем топике решился вопрос с нахождением всех элементов удовлетворяющих RegEx'у (с помощью match), но применив на практике столкнулся с рядом проблем:

Массив который мы получаем более чем на 50% состоит из пустых элементов - но это мелочи, но так же мы ловим странные элементы, хотя на онлайн-тестерах RegEx'ов, да и на своей практике - все работает верно, что делать?

Регулярка:
Код:
^(((https?)|(ftp)):\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$
Цель: найти все ссылки в строке с путями или без, а так же в различном написании (http/https/ftp) и с www или без

Код:
http://www.sitename.domain/dir/dir2/file.jpg
www.sitename.domain/dir/file.jpg
dasd.asdas/~sad.js
sub.sitename.domain/dir/dir2/file.jpg
site.do/file.pjg
htttp://google.com/ansdjnaskd/najskd/inasd.jf
https://go.do/dir/file.png
ftp://site.dom/file.blah_blah
корректно работает на этом

Но например ссылку site.do/file.pjg и текст polly (site.do/file/pjg polly)
Match видит как:
Код:
site.do/file/pjg polly| undefined| undefined| undefined| undefined| site| do| /file/pjg polly| undefined|
Где | - разделитель элементов массива

С двумя/более ссылками в строке - тихий ужас
Ответить с цитированием
  #2 (permalink)  
Старый 14.02.2013, 18:39
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

что на входе?
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
  #3 (permalink)  
Старый 14.02.2013, 19:00
Аспирант
Отправить личное сообщение для gJam Посмотреть профиль Найти все сообщения от gJam
 
Регистрация: 21.07.2011
Сообщений: 92

Сообщение от gJam Посмотреть сообщение
site.do/file/pjg polly
это
Ответить с цитированием
  #4 (permalink)  
Старый 14.02.2013, 19:11
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

Сообщение от gJam
Цель: найти все ссылки в строке
вся строка какая?
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
  #5 (permalink)  
Старый 14.02.2013, 19:22
Аспирант
Отправить личное сообщение для gJam Посмотреть профиль Найти все сообщения от gJam
 
Регистрация: 21.07.2011
Сообщений: 92

Ввожу:
site.do/file/pjg polly
Получаю массив разделенный |
site.do/file/pjg polly| undefined| undefined| undefined| undefined| site| do| /file/pjg polly| undefined|
Ответить с цитированием
  #6 (permalink)  
Старый 15.02.2013, 01:01
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,124

gJam,
str = 'http:\/\/www.sitename.domain\/dir\/dir2\/file.jpg \
http:\/\/www.sitename.domain\/dir\/file.jpg \
dasd.asdas\/~sad.js \
sub.sitename.domain\/dir\/dir2\/file.jpg \
site.do/file.pjg \
htttp:\/\/google.com\/ansdjnaskd\/najskd\/inasd.jf \
https:\/\/go.do\/dir\/file.png \
site.do/file/pjg polly \
ftp:\/\/site.dom\/file.blah_blah'
reg = /(^|\s)(((https?)|(ftp)):\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})(\/[~\w\.-]*)*\/?/gim
alert(str.match(reg).join('\n'))
Ответить с цитированием
  #7 (permalink)  
Старый 15.02.2013, 03:17
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

function LinkRepL (a) {
  var b = a.split(/^(?:[^.:\/]*?[.:])?(?:\/\/){0,1}|\/(?!\/)/ig).join('|');
  if(b==a) return false;
  return b;
}

var arr =[ 
'//www.sitename.domain/dir/dir2/file.jpg',
'http://www.sitename.domain/dir/dir2/file.jpg',
'www.sitename.domain/dir/file.jpg',
'dasd.asdas/~sad.js',
'sub.sitename.domain/dir/dir2/file.jpg',
'site.do/file.pjg',
'htttp://google.com/ansdjnaskd/najskd/inasd.jf',
'https://go.do/dir/file.png',
'ftp://site.dom/file.blah_blah'
]
for (var i=0; i<arr.length; i++) {
   alert(LinkRepL (arr[i]) );
}
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
RegEx / Last element gJam Общие вопросы Javascript 2 14.02.2013 16:33
Match() для запроса $(...) Grammka Общие вопросы Javascript 4 16.10.2012 22:10
Возможно ли как-то структурировать массив match? dump Общие вопросы Javascript 1 29.07.2012 12:19
Функция Preg match adik7960 Общие вопросы Javascript 13 06.05.2012 22:02
Почему match() возвращает значение undefined yolka Events/DOM/Window 2 24.04.2010 15:09