3

我将三个网址拆分为关键字。在 JavaScript 中,我想查看其中两个 Url 是否匹配两个给定的关键字。两个关键字都必须匹配两个 url 才能继续执行代码,但我想不出一个捷径。

我试过了...

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

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

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

有谁能够帮助我?

4

7 回答 7

2

||并且&&是逻辑运算符。您不能将字符串用作其操作数(有意义地)。

您必须单独检查每个 url 匹配并对结果进行逻辑操作。此外,您应该使用()不要混淆运算符优先级。

尝试类似:

[url1, url2, url3].indexOf("keyword1") != -1 && [url1, url2, url3].indexOf("keyword2") != -1
于 2012-12-10T17:38:10.310 回答
2

您应该能够使用该功能indexOf()

array = [url1, url2, url3]
if(array.indexOf("keyword1") >= 0 && array.indexOf("keyword2") >= 0) {
    ....
}
于 2012-12-10T17:45:31.260 回答
1

这是我能想到的最短方法:

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

如果你 polyfill Array.prototype.indexOf,你可以使用:

var urls = [url1,url2,url3];
if( urls.indexOf("keyword1") > -1 && urls.indexOf("keyword2") > -1) {
    // ok!
}
于 2012-12-10T17:39:27.127 回答
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

于 2012-12-10T17:40:00.273 回答
1

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

var urls = [url1, url2, url3];

if (urls.indexOf('keyword1') >= 0 && urls.indexOf('keyword2') >= 0) {
    // both keywords are in there somewhere
}
于 2012-12-10T17:41:02.973 回答
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]);
    }
}

然后matches数组包含与给定关键字匹配的url

于 2012-12-10T17:40:16.193 回答
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")
) {
  ...
}
于 2012-12-10T17:49:32.747 回答