JavaScript从字符串中提取主机名

我想仅匹配URL的根,而不匹配文本字符串中的整个URL。鉴于:

http://www.youtube.com/watch?v=ClkQA2Lb_iE

http://youtu.be/ClkQA2Lb_iE

http://www.example.com/12xy45

http://example.com/random

我想将最后2个实例解析为www.example.comexample.com域。

我听说正则表达式很慢,这将是我在页面上的第二个正则表达式表达式,因此,如果仍然需要不使用正则表达式,请告诉我。

我正在寻找此解决方案的JS / jQuery版本。

回答:

我建议使用npm软件包psl公共后缀列表。“公共后缀列表”是所有有效域后缀和规则的列表,不仅包括国家/地区代码顶级域,还包括将被视为根域的unicode字符(即www。食狮。公司.cn,bckobe.jp等)。

尝试:

npm install --save psl

然后用我的“ extractHostname”实现运行:

let psl = require('psl');

let url = 'http://www.youtube.com/watch?v=ClkQA2Lb_iE';

psl.get(extractHostname(url)); // returns youtube.com

我不能使用npm软件包,因此下面仅测试extractHostname。

function extractHostname(url) {

var hostname;

//find & remove protocol (http, ftp, etc.) and get hostname

if (url.indexOf("//") > -1) {

hostname = url.split('/')[2];

}

else {

hostname = url.split('/')[0];

}

//find & remove port number

hostname = hostname.split(':')[0];

//find & remove "?"

hostname = hostname.split('?')[0];

return hostname;

}

//test the code

console.log("== Testing extractHostname: ==");

console.log(extractHostname("http://www.blog.classroom.me.uk/index.php"));

console.log(extractHostname("http://www.youtube.com/watch?v=ClkQA2Lb_iE"));

console.log(extractHostname("https://www.youtube.com/watch?v=ClkQA2Lb_iE"));

console.log(extractHostname("www.youtube.com/watch?v=ClkQA2Lb_iE"));

console.log(extractHostname("ftps://ftp.websitename.com/dir/file.txt"));

console.log(extractHostname("websitename.com:1234/dir/file.txt"));

console.log(extractHostname("ftps://websitename.com:1234/dir/file.txt"));

console.log(extractHostname("example.com?param=value"));

console.log(extractHostname("https://facebook.github.io/jest/"));

console.log(extractHostname("//youtube.com/watch?v=ClkQA2Lb_iE"));

console.log(extractHostname("http://localhost:4200/watch?v=ClkQA2Lb_iE"));

无论具有协议或什至端口号,都可以提取域。这是一个非常简化的非正则表达式解决方案,所以我认为这可以做到。

以上是 JavaScript从字符串中提取主机名 的全部内容, 来源链接: utcz.com/qa/421605.html

回到顶部