0

ブラウザで現在の URL をチェックし、それに応じて動作するスクリプトを作成しています。コードは次のとおりです。

if (url.match("^https?://(www\.)?bing\..+$")) {
    engine = "bing";
} else {
    if (url.match("^https?://(www\.)?google\..+$"))
        engine = "google";
    else
    if (url.match("^https?://(www\.)?yahoo\..+$"))
        engine = "yahoo";
    else .... // etc.
}

8 の Web サイトについても同様です。そうでなければ、このコードを改善する方法はありますか。私には愚かに見えます。

4

3 に答える 3

3

Put your engines in an array and loop,

something like this

   sengs = ['bing','google','yahoo'];
   foreach of yourarray {
        if(url.match("^https?://(www\.)?"+your value+"\..+$")){
            engine = your value;
        }
    }  
于 2013-08-22T12:49:39.507 に答える
2

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;
}
于 2013-08-22T12:56:36.163 に答える
1

実際には、探している URL の一部の変数で一致位置を取得できます。

そのようです:

url = ['https://www.google.com','https://www.yahoo.com']

for (var i = 0; i<url.length; i++ )
{
    var site = url[i].match("^https?://(www\.)?([A-Za-z0-9]+)\..+$")[2]
    alert(site)
}

そして、それを手に入れて、あなたがしようとしていることを何でもするように切り替えることができます:

switch(site) {
     case "google": { /* do something..*/ } break;
     case "yahoo" : { /* do something..*/ } break;
}

作業フィドルhttp://jsfiddle.net/XPT3L/に従います

于 2013-08-22T12:48:49.717 に答える