URLで使用して、URLからドメイン名を取得しないのはなぜmatch
ですか? これにより、コードが大幅に短縮され、ほぼ同じチェックを毎回記述する必要がなくなります。
var engine = url.match(/:\/\/(.[^\.]+)/)[1];
この部分は、プロトコルの後の最初の単語のみを取得します。これはwww
、ほとんどの Web サイトに当てはまります。正しい名前を確実に取得するには、追加のチェックを使用してこれを関数でラップできます。
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
この値が、受け入れた engined の配列内にあるかどうかを確認する必要があります。これは、 を使用して実行できますArray.indexof
。
var engines = ['google', 'bing', 'yahoo'];
var domain = getDomainName(url);
if (engines.indexOf(domain) > -1) {
engine = domain;
}
編集: これでエンジン名がわかりました。これを switch-case (または if ステートメントの方が良い場合) で使用し、やりたいことを実行します。これを行うと、エンジン配列を取り除くことができます。
これらすべてをまとめると、必要なのはこのコードだけです。
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;
}