Mark一个网址格式的正则

遇到一个需求是要把文章里面的链接文本找出来并转成a标签的链接,于是就搞了个正则,如下:

"((https|http)?://)" + "(([0-9]{1,3}\.){3}[0-9]{1,3}" // IP形式的URL- 199.194.52.184 + "|" // 允许IP和DOMAIN(域名) + "([0-9a-z_!~*'()-]+[.])*" // 域名- www. + "([0-9a-z][0-9a-z-]{0,61})?[0-9a-z][.]" // 二级域名 + "[a-z]{2,6})" // first level domain- .com or .museum + "(:[0-9]{1,4})?" // 端口- :80 + "((/?)|" // a slash isn't required if there is no file name + "(/[0-9a-z_!~*'().;?:@&=+$,%#-]+)+/?)" + "( |\\s| |<br/>|$|[<>])"; //查找结尾

要注意带上查找结尾的部分会带上里面筛出来的符号,要记得反查去掉。
大概的代码如下,可以根据自己的需要再做修改。

function formatText(content){ var result = content; var strRegex = "((https|http)?://)" + "(([0-9]{1,3}\.){3}[0-9]{1,3}" // IP形式的URL- 199.194.52.184 + "|" // 允许IP和DOMAIN(域名) + "([0-9a-z_!~*'()-]+[.])*" // 域名- www. + "([0-9a-z][0-9a-z-]{0,61})?[0-9a-z][.]" // 二级域名 + "[a-z]{2,6})" // first level domain- .com or .museum + "(:[0-9]{1,4})?" // 端口- :80 + "((/?)|" // a slash isn't required if there is no file name + "(/[0-9a-z_!~*'().;?:@&=+$,%#-]+)+/?)" + "( |\\s| |<br/>|$|[<>])"; //查找结尾 var nullReg = " |\\s| | |$|[<>]"; var reNull=new RegExp(nullReg,'gi'); var re=new RegExp(strRegex,'gi'); result = result.replace(re, function(val){ var s = val.match(reNull); return '['+val+']('+val+')'+s[0] });}

Comments