如何匹配变量对

时间:2012-12-10 17:35:21

标签: javascript operators

我有三个网址,我已经拆分为关键字。在JavaScript中,我想看看其中两个Urls是否匹配两个给定的关键字。两个关键字必须匹配两个网址才能继续进行,但我想不出一个简短的方法。

我试过......

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

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

这是我得到的。问题是,它仅为其中一个关键字返回一个匹配项,而不是仅返回两者的匹配项。我有一种感觉,不排除第一场比赛导致第二场比赛相同的变量。我希望这是有道理的!

有人能帮助我吗?

7 个答案:

答案 0 :(得分:2)

||&&是逻辑运算符。你不能将字符串用于他们的操作数(有意义地)。

您必须单独检查每个网址匹配并对结果执行逻辑操作。此外,您应该使用()来解决运算符优先级问题。

尝试类似:

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

答案 1 :(得分:2)

您应该能够使用函数indexOf()

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

答案 2 :(得分: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!
}

答案 3 :(得分: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

答案 4 :(得分:1)

如果将所有网址值合并到一个数组中,则可以使用.indexOf()(如果浏览器不支持这种相对较新的方法,则该网页包含兼容版本。)

var urls = [url1, url2, url3];

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

答案 5 :(得分: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]);
    }
}

匹配数组然后包含与给定关键字匹配的网址

答案 6 :(得分:0)

没有多重匹配的简写,你必须写出条件,并匹配不同的组合:

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")
) {
  ...
}