2013-11-08 5 views
1

Я попытался найти регулярное выражение, чтобы обнаружить любую ссылку в строке.Regex, чтобы остановить обнаружение ссылки при достижении  

Currenly с помощью: /(https?:\/\/[^\s]+)/g

Это работает хорошо, пока я не вижу ссылки такого рода:

http://campus.inkrement.no/Show/Index/2757798 for å lære mer 

Я хочу, чтобы он заканчивался на первой  

Так будет:

<a href='http://campus.inkrement.no/Show/Index/2757798'>http://campus.inkrement.no/Show/Index/2757798</a>&nbsp;for&nbsp;å&nbsp;lære&nbsp;mer 

Вместо этого:

<a href='http://campus.inkrement.no/Show/Index/2757798&nbsp;for&nbsp;å&nbsp;lære&nbsp;mer'>http://campus.inkrement.no/Show/Index/2757798&nbsp;for&nbsp;å&nbsp;lære&nbsp;mer</a> 

У кого-нибудь есть идеи?

+3

Вы можете попробовать запустить второе регулярное выражение после первого матча, чтобы вырезать все после и после первого   – m0nk3y

ответ

2

Я думаю, вы должны использовать отрицательный предпросмотр здесь

что-то вроде:

/(https?:\/\/(?:(?!&nbsp;)[\S])+)/g 

[\S] будет соответствовать любому не являющемуся пространству

(?!&nbsp;) только если нет &nbsp; впереди

?: помешает от улавливания этой группы (необязательно)

+0

Работает как шарм, спасибо! : D – QuangTV

+0

@Adassko +1 для кратчайшего рабочего регулярного выражения. – Tafari

0

Не было /(https?:\/\/[^\s]+?)&nbsp;/g сделать трюк? Просто обратите внимание, что вы соответствуете первому &nbsp;, поэтому вам нужно добавить его в свою заменяющую строку. Всегда есть закрытие &nbsp;?

+0

Спасибо, но это не помогает :(Это остановится, когда он достигнет последнего ' ', но я хочу для остановки при первом 'nbsp;' – QuangTV

+0

Обратите внимание на '?' после '+', что делает его неохотным (он будет как можно меньше). Вы попробовали это? – SQB

+0

@SQB все равно вы бы добавили '& nbsp' к результату, он этого не хотел. – Tafari

1

Вы можете добавить только несколько символов в вашем выражении, чтобы получить это:

/(https?:\/\/[^\s]+?)(?=&nbsp;)|(https?:\/\/[^\s]+)/g

SAMPLE:

http://campus.inkrement.no/Show/Index/2757798&nbsp;for&nbsp;å&nbsp;lære&nbsp;mer

ВЫВОД:

http://campus.inkrement.no/Show/Index/2757798

+0

Это тоже работает, спасибо огромное! – QuangTV

+2

Это не сработает, если в строке – Adassko

+0

не будет '  @ @ Адаск, да, вы правы, я просто проверил это. Так что ваш лучший выбор для меня сейчас. Еще раз спасибо :) – QuangTV

 Смежные вопросы

  • Нет связанных вопросов^_^