JavaScript indexOf语句的优化

3

我正在使用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 和 search3 也是 true。我该如何编写一个简单的搜索算法来识别单词可能不按正确顺序或聚集在一起的情况?


4
你希望搜索算法的返回结果应该是什么?如果目标短语中有任何一个单词,就返回True吗?如果所有单词都在目标短语中但顺序可以任意,就返回True吗?如果大多数单词在目标短语中出现,就返回True吗? - jfriend00
此外,您需要匹配整个单词还是允许子单词匹配? - jfriend00
对于子单词和完整单词匹配,返回true。 - methuselah
抱歉,我没有意识到那会有多难 - 我省略了search4! - methuselah
1个回答

4
这里有一个函数,可以告诉你搜索字符串中的所有单词是否在目标字符串中存在,不考虑大小写或单词边界。
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);
}

这个算法并不强制单词边界,所以搜索 "an" 将匹配包含 "and" 或 "answer" 的目标。强制单词边界需要更多的代码来理解什么是有效的单词边界。


1
@methuselah - 我不理解你在什么类型的数据中搜索什么。你能描述一下你想在代码中做什么吗?你正在尝试搜索哪种数据结构中的内容? - jfriend00

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接