2011-12-01 99 views
1

目前,我有以下的正则表达式替换URL到HTML超链接:正则表达式的URL超链接

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> 

是否有人知道我如何避免这种情况?

+0

我认为这已经被回答了:http://stackoverflow.com/questions/37684/how-to-re-place-plain-urls-with-links –

回答

1

我已经通过之前和之后的字符串添加一个空格固定它,前后用空格替换所有网址:

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

您可以使用负前瞻断言(写作(!!表达式))来执行此操作。所以......

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