Regex для URL на гиперссылку - PullRequest
1 голос
/ 02 декабря 2011

В настоящее время у меня есть следующее регулярное выражение для замены URL на гиперссылку HTML:

msg = msg.replace(/(\b((https?|ftp|file):\/\/|www.)[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/gi, "<a href='out.php?u=$1'>$1</a>");

Это заменяет

http://www.stackoverflow.com

на

<a href='out.php?u=http://www.stackoverflow.com'>http://www.stackoverflow.com</a>

Но теперь у меня проблема.Когда у меня уже есть гиперссылка, я не хочу заменять URL-адрес внутри этой гиперссылки новой гиперссылкой.

Итак:

<a href='http://www.stackoverflow.com'>Stackoverflow</a>

не должно становиться:

<a href='<a href='out.php?u=http://www.stackoverflow.com'>http://www.stackoverflow.com</a>'>Stackoverflow</a>

Кто-нибудь знает, как я могу предотвратить это?

Ответы [ 2 ]

1 голос
/ 02 декабря 2011

Я уже исправил это, добавив пробел до и после строки, и заменил все URL пробелами до и после:

msg = " " + msg + " ";
msg = msg.replace(/(\s)(((https?|ftp|file):\/\/|www.)[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])(\s)/gi, " <a target='_blank' href=\"" + websiteUrl + "/out.php?u=$2\"><font color='" + hyperlinkColor + "'>$2</font></a> ");
msg = StringUtil.trim(msg);

Это не заменяет все гиперссылки, потому что гиперссылка не имеет пробелов до и после URL.

1 голос
/ 02 декабря 2011

Вы можете сделать это с отрицательным прогнозным утверждением, записанным как (?! Выражение).Итак ...

?!(\<a)/(\b((https?|ftp|file):\/\/|www.)[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/gi, "<a href='out.php?u=$1'>$1</a>");
...