在JS中使用正则表达式查找多个关键字的最佳匹配

时间:2016-02-26 11:23:13

标签: javascript arrays regex

我试图在JS中使用正则表达式来检查数组的内容是否可以匹配特定的字符串。字符串可以由许多单词组成,内容的数组也是如此。 我的问题是:

var myQuery = "I am looking for the red bike";
var myArray = [{kid:24,keyword:"red"}, {kid:32,keyword:"bike"}, {kid:51,keyword:"red bike"}];

在这种情况下,我不想只获得红色"或"自行车"但是"红色自行车"因为它是最好的匹配。 现在我已经恢复了请求,但它并不结合:

myArray.some(function (el) {
    var myRegEx = new RegExp(el.keyword, "gi");
    if (myRegEx.test(myQuery)) {
        return true;
    }
});

匹配" red"。 这个功能应该给我" red"只有我的查询是:

var myQuery = "I am looking for the red car";

所以我真的不习惯regEx,所以如果有人能帮助我,那就太好了。

1 个答案:

答案 0 :(得分:0)

您可以使用Levenshtein distance实现,即计算两个字符串(myQuery与每个项keyword)之间的差异或距离,然后对数组进行排序并返回{{1}最低距离作为最佳匹配。

你可以找到一个Levenshtein javascript实现here(还没有测试过它与其他的相比有多好)

keyword

演示 - >的 http://jsfiddle.net/hoo207o3/