Fuzzy 是一个在 JavaScript 中实现模糊搜索的 npm 包。它可以根据输入的字符串匹配相应的字符串,即使输入的字符串有一些拼写错误或者缺失一些字符。本文将详细介绍 Fuzzy 的使用方法以及其背后的算法原理。
安装
在项目中使用 Fuzzy 需要先安装它。可以使用 npm 在命令行中进行安装:
--- ------- -----
基础用法
Fuzzy 的基础用法是根据一个输入的字符串和一个包含多个字符串的数组进行匹配。以下是一个例子:
----- ----- - ----------------- ----- ------- - - -------- ------------ - ------ -------- - -- ----- ------ - - - ----- ----- ---- -- - ----- ----- ---- -- - ----- ---- ------ - -- ----- ------- - ---------------- ---- ------- ---------
在上面的例子中,我们首先引入了 fuzzy 包,然后定义了一个包含三个人名对象的数组。接着,我们调用了 fuzzy.filter
函数,传入了一个需要匹配的字符串 'Jn De'
和数据源 people
。options 变量是一个可选参数,它包含了一个 extract
函数,用于指定从每个数据源元素中提取需要匹配的字符串。
最后,函数返回了一个结果数组 results
。这个数组包含了一个或多个对象,每个对象都有两个属性:string
和 score
。string
表示匹配成功的字符串,score
是一个介于 0 和 1 之间的浮点数,表示匹配程度。我们可以根据 score
的大小对结果进行排序。
高级用法
在上面的例子中,Fuzzy 只是简单地将输入的字符串和数据源中的每个字符串进行比较。但实际上,Fuzzy 提供了很多高级功能,使得匹配更加精确。以下是一些常用的高级功能:
缩写支持
Fuzzy 支持缩写的匹配。例如,如果输入字符串是 'NYC'
,它可以匹配到数据源中包含 'New York City'
的字符串。
权重设置
Fuzzy 允许为数据源中的不同部分设置权重。例如,我们可以给人名中的姓和名分别设置不同的权重,使得匹配更加准确。
----- ------- - - -------- ------------ - ------ - ---------- ------------- --------- ----------- -- -- ------- ---------------- - ------ - ---------- -- --------- - -------------- - --
在上面的例子中,我们定义了一个 extract
函数,它返回一个包含 firstName
和 lastName
字段的对象。然后,我们定义了一个 weight
函数,它返回一个包含 firstName
和 lastName
字段的对象,这些字段表示不同部分的权重。在 weight
函数中,我们根据结果对象中的 key
属性来获取对应的权重值。
模式匹配
Fuzzy 支持模式匹配,即可以将通配符(如 *
、?
)作为输入字符串的一部分。例如,如果输入字符串是 'J*n ?o?'
,它可以匹配到 'John Doe'
和 'Jane Doe'
这两个字符串。此外,Fuzzy 还支持正则表达式的匹配。
算法原理
Fuzzy 的算法基于一个叫做 Levenshtein 距离的概念。Levenshtein 距离是指将一个字符串转换成另一个字符串所需的最小编辑
来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/54052