遇到一个需求是要把文章里面的链接文本找出来并转成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+''+s[0]
});}