2012-03-15 2 views
0

Это Regex ([a-zA-Z0-9]?(?:http[s]?://)?(?:(?:\w+)\.)(?:\S+)(?:\.(?:\w+))+?) успешно находит любые из http://www.msn.com мест где или www.msn.com или msdn.microsoft.com или http://msdn.microsoft.com внутри строки. Однако есть два алгоритма замены, которые мне нужно использовать, это один <a href=\"$1\" target=\"_blank\" onclick=\"preventDualEditing(event)\">$1</a> и этот <a href=\"http://$1\" target=\"_blank\" onclick=\"preventDualEditing(event)\">$1</a>. Обратите внимание, что разница в том, что одна строка префикса содержит http://, которая необходима для ссылок, таких как www.msn.com.Условный Замена в Regex

Но то, что происходит это цикл, который я использую заявление заменяющего в Мессинг вещи, потому что, если он пытается заменить www.msn.com первого вхождения найденного http://www.msn.com и поэтому он заменяет его несколько раз - один раз, когда он находит ссылку с http:// уже и один раз, когда найдет www.msn.com.

Есть ли способ для меня заменить один проход, который условно добавит http:// к строке, если необходимо?

+1

что делает первый [A-Za-z0-9]? сделать для вас? когда вам нужно было что-то захватить перед «http: //»? Можете ли вы просто захватить все после «http: //», а затем заменить его на GetSet

+0

То, что было в состоянии сделать, это убедиться, что я, например, не забираю скобки в этой строке '(www.msn.com)' - Я просто пишу ссылку. –

ответ

4

Try с этим:

([a-zA-Z0-9]?http[s]?://)?((?:(?:\w+)\.)(?:\S+)(?:\.(?:\w+))+?) 

и использовать $2 вместо $1

+1

Если бы я мог выложить вас 1000 раз, я бы - отличная идея, мой друг! –