2012-12-10 62 views
3

我有三個網址,我分成了關鍵字。在JavaScript中,我想查看兩個Url是否匹配兩個給定的關鍵字。兩個關鍵字都必須匹配兩個url的代碼才能繼續,但我想不出一個簡短的方法來做到這一點。如何匹配變量對

我已經試過......

if (url1 || url2 || url3 === "keyword1" && "keyword2") { 
.... 
} 

而且

if (url1 || url2 || url3 === "keyword1" && url1 || url2 || url3 == "keyword2") { 
    .... 
    } 

這是據我得到了。問題是,它僅爲其中一個關鍵字返回匹配項,而不是僅返回兩個匹配項。我有一種感覺,即不排除第一場比賽會導致第二場比賽匹配相同的變量。我希望這是有道理的!

任何人都可以幫助我嗎?

+0

你的意思'keyword1'和'keyword2'必須出現在任何三個網址嗎? –

+0

@Jack是的,沒錯。一個關鍵字在三個Url中的一箇中。另一個關鍵字是其餘兩個Url中的一個。 – H4NIO

+0

對,你需要知道哪些變量包含關鍵字? –

回答

1

如果你把所有的URL值到一個數組,你可以使用的網址.indexOf()(如果瀏覽器不支持這種相對較新的方法,該頁面將包含兼容版本)。

var urls = [url1, url2, url3]; 

if (urls.indexOf('keyword1') >= 0 && urls.indexOf('keyword2') >= 0) { 
    // both keywords are in there somewhere 
} 
+1

謝謝@Jack我還沒有測試過這個,但我很肯定它和凱文一樣,所以謝謝你幫助我:) – H4NIO

+0

好的,我根據自己的經驗改變了指定的答案,var的作品,而數組可能不工作跨瀏覽器,並且答案有效,並且是我想要的簡短手段。正如我對這麼多快速答案感到高興,我也考慮到了答覆的速度! – H4NIO

2

||&&是邏輯運算符。你不能使用字符串作爲操作數(有意義)。

您將不得不單獨檢查每個URL匹配並對結果進行邏輯運算。另外,您應該使用()以免混淆運算符優先級。

試着這麼做:

[url1, url2, url3].indexOf("keyword1") != -1 && [url1, url2, url3].indexOf("keyword2") != -1 
1

這是我能想到的最簡單的辦法:

switch("keyword1") { 
    case url1: case url2: case url3: 
    switch("keyword2") { 
     case url1: case url2: case url3: 
     // success! rest of code here 
    } 
} 

如果填充工具Array.prototype.indexOf,你可以使用:

var urls = [url1,url2,url3]; 
if(urls.indexOf("keyword1") > -1 && urls.indexOf("keyword2") > -1) { 
    // ok! 
} 
+0

謝謝@Kolink和所有人提供各種各樣的解決方案。你救了這個女孩又一個24小時的頭痛 – H4NIO

1
var urls  = [url1, url2, url3], 
    keywords = ["keyword1", "keyword2"], 
    match1 = 0, 
    match2 = 0; 

for (i=urls.length; i--;) { 
    if (urls[i].indexOf(keywords[0]) != -1) { 
     match1 = i; 
    }else if (urls[i].indexOf(keywords[1]) != -1) { 
     match2 = i; 
    } 
} 

if (match1 && match2) { 
    //urls[match1] //contains url matched to keyword1 
    //urls[match2] //contains url matched to keyword2 
} 

沒有array.indexOf

0

編輯:

一個完整的解決方案:

var urls = ['http://google.com', 'http://yahoo.com']; 
var keywords = ['oo', 'com']; 

var matches = []; 
var i; 
for (i = 0; i < urls.length; i++) { 

    var j; 
    var matched = true; 
    for (j = 0; j < keywords.length; j++) { 
     matched = matched && urls[i].indexOf(keywords[j]) !== -1; 
    } 

    if (matched) { 
     matches.push(urls[i]); 
    } 
} 

比賽數組,那麼包含符合給定的關鍵字

+0

'url1 ==「keyword1」&& url1 ==「keyword2」'...是不是像,總是假? –

+0

@Jack:tnx ...更正 –

+0

如果所有三個url都匹配任何關鍵字,那麼這是正確的,如果兩個urls匹配關鍵字則不行。 – Guffa

2

您應該可以使用功能indexOf()

array = [url1, url2, url3] 
if(array.indexOf("keyword1") >= 0 && array.indexOf("keyword2") >= 0) { 
    .... 
} 
+1

好的,謝謝大家!我會通過你的所有答案,讓你都知道什麼工作:) – H4NIO

+1

謝謝@凱文我先試了這一個,它是完美的!非常感謝! – H4NIO

+1

如果您發現我的答案有幫助,請將其提供給其他人以及其他任何有幫助的答案。 – Kevin

0

沒有多個匹配速記,你寫出來的conditons,並匹配不同的組合:

if (
    (url1 === "keyword1" && url2 === "keyword2") || 
    (url1 === "keyword1" && url3 === "keyword2") || 
    (url2 === "keyword1" && url3 === "keyword2") || 
    (url1 === "keyword2" && url2 === "keyword1") || 
    (url1 === "keyword2" && url3 === "keyword1") || 
    (url2 === "keyword2" && url3 === "keyword1") 
) { 
    ... 
}