Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > RegExp находит лишнее


Автор: Onis 26.5.2011, 14:59
Здравстрвуй винград.

Код который должен находить все слова начинающиеся с http:// перед и в конце которых должен находится или пробел или конец/начало/перевод строки.
JS:
Код

var text = document.getElementById('content').innerHTML;
var str = 'http://\\S*';
var n = new RegExp('(?:\\n|\\s|^)' + str + '(?=\\n|\\s|$)', 'ig');
console.log(text.match(n))

HTML:
Код

<div id="content">test test test
 http://google.com  test test test http://ya.ru
 'http://test.ru'</div>

log:
Код

[" http://google.com", " http://ya.ru"]

Работает идеально. Но почему он запоминает пробел перед словом?

Автор: Stolzen 26.5.2011, 15:15
Насколько я помню, в js в регулярных выражениях нет заглядывания назад (или я неправ?) - поэтому и цепляется строка с пробелом.

Можно предположить, что если адрес заканчивается на кавычку, то скорее всего, он на нее и начинается, и можно сделать вот такое re:

Код

new RegExp('http://[-A-Za-z0-9.]+(?=(\\s+)|$)', 'ig');


Хотя, думаю, лучше использовать trim. 

Автор: Котокобра 27.5.2011, 00:48
так вроде покороче будет

Код

var s = 'test test test\n http://google.com  test test test http://ya.ru\n \'http://test.ru\'';

alert(
    s.match(/http:\/\/[^\s]*/gi)
);

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)