2013-05-07 60 views
-4

我有这个字符串列表:滤波器地址URL

var s="http://www.website1.com/, http://www.website2.es/forum/something, http://website3.info, website4.is"; 

,输出将是:

 
website1.com 

website2.es 

website3.info 

website.is 

我怎样才能在jQuery的最小模糊的JavaScript实现这一目标?

+0

你需要一个数组来处理? – Simon 2013-05-07 23:04:06

回答

2

不是最有效的,但使用parse_url从PHP .js文件(http://phpjs.org/functions/parse_url/):

var sList = "http://www.website1.com/, http://www.website2.es/forum/something, http://website3.info, website4.is"; 

var aStr = sList.split(', '); 

var sResult = ""; 

for(var i in aStr) 
{ 
    var oUrlParts = parse_url(aStr[i]); 
    sResult += oUrlParts['host']+"\n\n"; 
} 

console.log(sResult); 
+1

你测试过了吗?它为第四个值“website4.is”给出了“undefined”,并且它将“www”子域保留在前两个值上。 http://jsfiddle.net/KUGbN/ – 2013-05-08 00:20:26

+0

确认。似乎在字符串中需要一个前导'protocol://',否则它会给出'undefined'。 http://jsfiddle.net/KUGbN/2/ – GitaarLAB 2013-05-08 02:08:49

2

为什么不能简单:

//your string: 
var str=("http://www.website1.com/, http://www.website2.es/forum/something, http://website3.info, website4.is"); 

//my function: 
function gtBaseUrl(s){ 
    return s.split('://').pop().split('/')[0]; 
} 

//example use: 
var lnks=str.split(', '); 

for(var i=0, L=lnks.length; i < L; i++){ 
    //do stuff with each url 
    alert(gtBaseUrl(lnks[i]).replace(/^www./i,'')); 
    //if you don't want www. stripped then remove: ' .replace(/^www./i,'') ' 
} 

工作的jsfiddle演示here

您可以修改for循环它到任何(格式化输出),您需要(使用innerHTMLbr\n在文字区域等)

+0

你明确地剥离了“www”子域名,但是其他子域名(* foo * .bar.com)呢?子域可能应该被纳入或排除在全局之外,而不是像这样选择性地选择。 – 2013-05-08 00:38:02

+0

@DaggNabbit:我知道,但那么'foo.co.uk'和'www.foo.co.uk'怎么办?事实上,对于其他读者来说,可能会更好(略去'.replace(/^www./i,'')'),但它不符合www被剥离的提问者问题。 – GitaarLAB 2013-05-08 00:43:23

+0

是的,这是与试图删除子域名的问题,你需要检查它与实际顶级域名列表,这是一个looong名单...真的你的答案是唯一一个实际上做OP的要求(给他样本数据,至少)。我只留下了我的答案,因为它给出了与接受的答案相同的结果,但代码少一些。 – 2013-05-08 00:47:36

1

的常用方法在JavaScript中做,这是创建一个a元素,网址分配给它的href属性,然后获取其hostname PROPERT年。

var a = document.createElement('a'); 
a.href = "http://stackoverflow.com/questions/16429929/filter-address-url"; 
console.log(a.hostname); // "stackoverflow.com" 

没有外部依赖关系,三行代码。


当然,你也可以这样做:

"http://stackoverflow.com/questions/16429929/filter-address-url".split('/')[2] 

从你的问题,看起来你不想在结果子域( “WWW”),但因为您接受了返回子域名的答案(并且在第四个值上失败),所以我会在这里留下。

+0

+1为正确的方式。但''http://stackoverflow.com/questions/16429929/filter-address-url“.split('/')[2]'不会工作给askers的例子(其中网址没有http://)。 PS,你对我的回答有什么看法?你能想到一个有效的网址,我的功能会失败吗? – GitaarLAB 2013-05-08 00:38:03

+0

@GitaarLAB,好点(虽然接受的答案也失败了,实际上它不是一个合适的URL,所以“真正的”解决方案,无论它是什么,可能“应该”都会失败):)只留下一条评论回答... – 2013-05-08 00:38:37