博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
前端做模糊搜索
阅读量:6654 次
发布时间:2019-06-25

本文共 1249 字,大约阅读时间需要 4 分钟。

hot3.png

我们先看一下效果图:

image

这是搜索关键字cfg时,会自动匹配到config方法

同样,我们再看另一个例子

image

通过关键字bi会匹配到好几个结果

这个和一些编辑器的搜索功能很像,比如sublime text,不需要知道关键字的完整拼写,只需要知道其中的几个字母即可。

那么这个功能在前端我们如何去实现呢?

不考虑性能的话,我们可以用正则简单实现如下:

把关键字拆分,加入(.?),如cfg最终为 (.?)(c)(.?)(f)(.?)(g)(.*?),然后拿这个正则去测试要搜索的列表,把符合要求的选项给拿出来即可

考虑到要高亮结果,我们还要生成对应的替换表达式,最后的函数如下

var escapeRegExp = /[\-#$\^*()+\[\]{}|\\,.?\s]/g;var KeyReg = (key) => {    var src = ['(.*?)('];    var ks = key.split('');    if (ks.length) {        while (ks.length) {            src.push(ks.shift().replace(escapeRegExp, '\\$&'), ')(.*?)(');        }        src.pop();    }    src.push(')(.*?)');    src = src.join('');    var reg = new RegExp(src, 'i');    var replacer = [];    var start = key.length;    var begin = 1;    while (start > 0) {        start--;        replacer.push('$', begin, '($', begin + 1, ')');        begin += 2;    }    replacer.push('$', begin);    info = {        regexp: reg,        replacement: replacer.join('')    };    return info;};

调用KeyReg把关键字传入,拿返回值的regexp去检测搜索的列表,把符合的保存下来即可。

到目前为止我们只实现了搜索功能,按更优的体验来讲,在搜索结果中,要优先把相连匹配的放在首位,如bi关键字,要把bind结果放到beginUpdate前面。第二个截图是有优化的地方的。

要完成这个功能,我们使用KeyReg返回值中的replacement,用它进行检测,把结果中长度最长的放前面即可,这块代码以后有时间再补充

2018.5.31

今天重构了下,增加了结果排序,完整的代码及使用示例如下

转载于:https://my.oschina.net/u/3611008/blog/1839378

你可能感兴趣的文章
php 回调函数
查看>>
Oracle 在 多个Virtualbox 虚拟机间 跨不同物理宿主机进行通信
查看>>
Visual Studio 2012完美的拥抱GitHub
查看>>
[转]asp.net MVC 常见安全问题及解决方案
查看>>
安装elasticsearch
查看>>
__inline定义的内联函数和宏的区别
查看>>
人生规划和GTD——"知"、"得"与"合"
查看>>
ntp/系统时钟/硬件时钟/双系统下计算机时间读取的问题
查看>>
iOS 如何在整个屏幕中都能实现滑动返回的效果
查看>>
欧拉工程第66题:Diophantine equation
查看>>
php二维数组按照键值排序的方法
查看>>
backBone.js初识
查看>>
Web API 安全问题
查看>>
ubuntu 14.04 安装preforce
查看>>
Ognl底层使用
查看>>
sflow
查看>>
Codeforces 85B. Embassy Queue【段树、馋】
查看>>
产品管理流程
查看>>
iOS_数据库3_sqlite3基本操作
查看>>
Linux下php安装Redis扩展
查看>>