2012-12-10 60 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") 
) { 
    ... 
}