Почему бы не просто получить доменное имя от URL-адреса, используя match
на странице? Это сделает ваш код намного короче, и вам не нужно писать почти -простая проверка каждый раз.
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;
}
Edit: Теперь у вас есть ваше имя двигателя, использовать это в распределительном регистре (или если заявления, если вам нравится это лучше), и делать то, что вы хотите сделать. Если вы сделаете это, вы можете избавиться от массива двигателей.
Собирает все это вместе, этот код все, что вам нужно:
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;
}
Карта двигатели в их регулярные выражения и петлю. –
не могли бы вы дать мне небольшой пример, я немного новичок в Javascript ^^; еще раз спасибо. – MNS