为什么不直接使用match
url 从 url 中获取域名?它会使您的代码更短,并且您不需要每次都编写几乎相同的检查。
var engine = url.match(/:\/\/(.[^\.]+)/)[1];
这篇文章只抓取了协议之后的第一个单词,这www
适用于大多数网站。为确保您获取正确的名称,您可以将其包装在一个函数中并进行额外检查:
function getDomainName(url) {
url = url.match(/:\/\/(.[^/]+)/)[1].split('.');
return url[url.length - 2].toLowerCase();
}
调用getDomainName(url)
现在将返回域名,您可以稍后使用。
getDomainName('http://bing.com/'); // bing
getDomainName('http://www.google.com/'); // google
getDomainName('http://stackoverflow.com/questions/18380805/improve-the-conditional-structure/'); // stackoverflow
// and so on
现在您只需要检查该值是否在您接受的引擎数组中。这可以使用Array.indexof
.
var engines = ['google', 'bing', 'yahoo'];
var domain = getDomainName(url);
if (engines.indexOf(domain) > -1) {
engine = domain;
}
编辑:现在你有了你的引擎名称,在 switch-case 中使用它(或者如果你更喜欢这些语句)并做你想做的事情。如果你这样做,你可以摆脱引擎阵列。
把所有这些放在一起,这段代码就是你所需要的:
function getDomainName(url) {
url = url.match(/:\/\/(.[^/]+)/)[1].split('.');
return url[url.length - 2].toLowerCase();
}
switch (getDomainName(url)) {
case "google":
// do stuff for google's engine.
break;
case "bing":
// Do Bing stuff.
break;
case "yahoo":
// and so on
break;
default:
// None of the engines was found
break;
}