开发者问题收集

完善 JavaScript indexOf 语句

2011-12-08
170

我正在用 JavaScript 编写一个简单的搜索算法。

var title = "The Greatest Movie Ever Made is here!";
var search1 = "the greATEST movie";
var search2 = "here IS made"
var search3 = "ever movie greatest the"

使用 indexOf() 只会返回 search1 false,但 search2,3 也返回 true。我该如何编写一个简单的搜索算法来识别单词顺序不正确或聚集在一起的情况?

1个回答

以下函数会告诉您搜索字符串中的所有单词是否都存在于目标中,而不考虑大小写或单词边界。

function findMatch(data, target) {
    var words = data.toUpperCase().split(/\s/);
    if (words.length === 0) {return(false);}
    var uTarget = target.toUpperCase().replace(/\s/, "");
    var matchCnt = 0;
    for (var i = 0; i < words.length; i++) {
        if (uTarget.indexOf(words[i]) != -1) {
            ++matchCnt;
        }
    }
    return(matchCnt === words.length);
}

此算法不强制单词边界,因此如果目标包含“and”或“answer”,则搜索“an”将匹配。强制单词边界需要更多能够理解有效单词边界的代码。

jfriend00
2011-12-08