javascript在字符串中提取网址并替换成超链接

最近做项目中遇到一个问题就是把字符串中的网址变成超链接
如 var str = "

http://wasmip.baidu.com.cn/mip/km/archives/km_archives_main/kmArchivesMain.do?method=view&fdId%1059192
测试22222
http://www.baidu.com

www.baidu.com";

目标字符串
"

http://wasmip.baidu.com.cn/mip/km/archives/km_archives_main/kmArchivesMain.do?method=view&fdId%1059192
测试22222
http://www.baidu.com

www.baidu.com"

[code="java"]
var str = '

http://wasmip.baidu.com.cn/mip/km/archives/km_archives_main/kmArchivesMain.do?method=view&fdId%1059192
测试22222
http://www.baidu.com

www.baidu.com';
var re=/(http:\/\/)?([A-Za-z0-9]+.[A-Za-z0-9]+[\/=\?%-&_~`@[]\':+!]*([^<>\"\"])*)/g;
str=str.replace(re,function(a,b,c){return ''+a+'';});

alert(str);
[/code]

在js中用正则表达式,结合文本的模式进行提取。

看你提供的文本,好像可以使用模式

  • http:// 开头
  • 第一个"<"号前面的部分

[code="java"]
var str = "

http://wasmip.baidu.com.cn/mip/km/archives/km_archives_main/kmArchivesMain.do?method=view&amp;fdId%1059192
测试22222
http://www.baidu.com

www.baidu.com";
var re=/(http:\/\/)?[A-Za-z0-9]+.[A-Za-z0-9]+[\/=\?%-&_~`@[]\':+!]*([^<>\"\"])*/gi;
var arry1;
var arry2=[];
var obstr=str;
while(arry1=re.exec(str)){
arry2.push(arry1[0]);
obstr=obstr.replace(arry1[0],'######');
}
var subos=''
for(var i=0;i subos=''+arry2[i]+'';
obstr=obstr.replace('######',subos);
}
alert(obstr);
[/code]
这个烦死了 花了半个小时

[code="js"] var str = "

http://wasmip.baidu.com.cn/mip/km/archives/km_archives_main/kmArchivesMain.do?method=view&amp;fdId%1059192
测试22222
http://www.baidu.com

www.baidu.com";
var reg=/(http:\/\/[^<]+)(?=<)/g,res=str.replace(reg,function($,$1){
return ""+$1+"";
});
document.write(res);[/code]

[code="java"]
var str = "

http://wasmip.baidu.com.cn/mip/km/archives/km_archives_main/kmArchivesMain.do?method=view&amp;fdId%1059192
测试22222
http://www.baidu.com

www.baidu.com";
var re=/(http:\/\/)?([A-Za-z0-9]+.[A-Za-z0-9]+[\/=\?%-&_~`@[]\':+!]*([^<>\"\"])*)/gi;
var arry1;
var arry2=[];
var obstr=str;
while(arry1=re.exec(str)){
arry2.push({'t':arry1[0],'u':arry1[2]});
obstr=obstr.replace(arry1[0],'######');
}
var subos=''
for(var i=0;i subos=''+arry2[i].t+'';
obstr=obstr.replace('######',subos);
}
alert(obstr);
[/code]