原文地址: http://www.cnblogs.com/index-html/archive/2013/04/17/js_keyword_match.html

重点关注评论中的代码..

var treeSearch = {
    makeTree: function(strKeys) {
        "use strict";
        var tblCur = {},
            tblRoot,
            key,
            str_key,
            Length,
            j,
            i
            ;
        tblRoot = tblCur;
        for ( j = strKeys.length - 1; j >= 0; j -= 1) {
            str_key = strKeys[j];
            Length = str_key.length;
            for ( i = 0; i < Length; i += 1) {
                key = str_key.charAt(i);
                if (tblCur.hasOwnProperty(key)) { //生成子节点 
                    tblCur = tblCur[key];
                } else {
                    tblCur = tblCur[key] = {};
                }
            }
            tblCur.end = true; //最后一个关键字没有分割符
            tblCur = tblRoot;
        }
        return tblRoot;
    },
    search: function(content, tblRoot) {
        "use strict";
        var tblCur,
            p_star = 0,
            n = content.length,
            p_end,
            match,  //是否找到匹配
            match_key,
            match_str,
            arrMatch = [],  //存储结果
            arrLength = 0   //arrMatch的长度索引
            ;
  
        while (p_star < n) {
            tblCur = tblRoot; //回溯至根部
            p_end = p_star;
            match_str = "";
            match = false;
            do {
                match_key = content.charAt(p_end);
                if (!(tblCur = tblCur[match_key])) { //本次匹配结束
                    p_star += 1;
                    break;
                }else{
                    match_str += match_key;
                }
                p_end += 1;
                if (tblCur.end === true) //是否匹配到尾部  //找到匹配关键字
                {
                    match = true;
                }
            } while (true);
  
            if (match === true) { //最大匹配
                arrMatch[arrLength] = { //增强可读性
                    key: match_str,
                    begin: p_star - 1,
                    end: p_end
                };
                arrLength += 1;
                p_star = p_end;
            }
        }
        return arrMatch;
    }
};

使用实例:

View Code?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
function test(strContent, strKeys) {
    var arrMatch,
        tblRoot = treeSearch.makeTree(strKeys),
        t = new Date();
  
  
    arrMatch = treeSearch.search(strContent, tblRoot);
  
    console.log("time is: " + (new Date() - t) + "mm");
  
    console.log(arrMatch);
}
var s = (function() {
    var Things = [' ', '\n', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'];
    var s = "";
    for (var i = 1000000; i >= 0; i--) {
        s += Things[parseInt(Math.random() * Things.length) % Things.length]
    };
    return s;
})()
test(s, ["abc", "efge", "fun", "tree"]);

转载于:https://www.cnblogs.com/ry123/archive/2013/04/24/3039720.html

JS高效关键字搜索---转相关推荐

  1. 关键字搜索软件_高效搜索神器,你选listary还是火柴?

    本文预计阅读5分钟. 你的电脑桌面是否杂乱不堪呢? 是不是打开特定的文件,每次都要一级一级的打开目录呢? 试想这样一个场景,你需要找一个文件,你只记得它的名字,但你不记得它在什么位置了,这时你该怎么办 ...

  2. JS——运用JSONP技术完成百度关键字搜索

    百度关键字搜索 接口地址:https://sp0.baidu.com/5a1Fazu8AA54nxGko9WTAnF6hhy/su?wd=&cb=fn 效果图: 代码如下: <!DOCT ...

  3. QQ音乐关键字搜索并生成下载url

    QQ音乐关键字搜索并生成下载url 1. 获取搜索的歌单信息 ​ 通过在QQ音乐进行关键字搜索,并通过F12检测,发现网页给网站https://c.y.qq.com/soso/fcgi-bin/cli ...

  4. layui 带按钮的搜索框_layui table可输入关键字搜索下拉框(select)

    layui-table-column-select 在layui table的基础上对表格列进行扩展:点击单元格显示可搜索下拉列表. 一.介绍 此项目是为了解决layui table表格单元格(col ...

  5. 如何高效的搜索github上面的资源

    如何高效的搜索github上面的资源 首先简单介绍一下github上一个项目主页具体包含了哪些信息,搜索的时候也会涉及到这些信息. 我们以搜索CTR(点击率预估)为例的话: 1.头铁型搜索:直接在搜索 ...

  6. vue高德地图实现关键字搜索

    高德地图准备工作 安装amap cnpm国内安装比npm更快些: cnpm install vue-amap --save main.js 配置amap的基础配置项 import GaodeMap f ...

  7. js实现关键字匹配高亮显示

    JS实现搜索关键字匹配高亮显示 首先看效果 需求:用户输入文字之后,调用后台接口查询匹配关键字(模糊搜索),并把匹配到的关键字进行高亮显示. 实现思路:将拿到的数据进行拆分,例如:用户输入" ...

  8. 使用HttpClient和Jsoup爬取京东商城关键字搜索的商品页面

    使用HttpClient可以创建浏览器对象,然后对页面数据进行抓取,另外再使用Jsoup库解析Html页面.因为Jsoup和JQuery一样有选择器获取元素的方式,所以抓取页面数据变得非常方便. 例如 ...

  9. 静态html页面关键字搜索高亮

    静态html页面关键字搜索高亮 最近项目要实现一个页面关键字搜索,刚好上网找了一款不错的插件,叫mark.js,官网地址,下面演示一个基于jq的案列,这个插件可以不依赖任何插件也可以实现这个功能,详情 ...

最新文章

  1. 吞吐量-Corda的故事
  2. java代码 创建文件夹的方法
  3. python之django中models学习总结
  4. 嵌入式视频采集编程思路(Video 4 Linux)-转
  5. 虚拟局域网(VLAN)中端口tagged和untagged在多种情况下的作用
  6. 台式计算机硬盘序号,[硬盘序列号的查看方法]台式机查看序列号的方法
  7. word绿豆沙颜色设置_Win7系统下将txt和word背景颜色设置为豆沙绿的方法
  8. OpenSSL 常用函数——证书操作
  9. 桃李春风一杯酒,江湖夜雨十年灯。
  10. 拳皇FANS们不得不看的动画
  11. K-mean clustering(K均值聚类算法)
  12. Ubuntu fastboot 烧写
  13. winedit使用教程_基础教程:BCDEDIT常用命令及使用实例(图)
  14. 十年期国债利率倒数与A股PE中位数走势
  15. 空间大战java_回忆S60(塞班)年代的JAVA游戏:有没有哪一款是你在课堂偷偷玩的?...
  16. 2019年7月训练记录(更新ing)
  17. 【号外】支付宝小程序,惊呆我的小伙伴
  18. 邢台职业技术学院计算机学费,邢台职业技术学院各专业学费标准
  19. 字重font-weight--没有UI的前端er
  20. 转载:自动驾驶之软件定义汽车

热门文章

  1. 你最想要的圣诞礼物是什么?
  2. Eclipse异常关闭启动不了的问题
  3. LDAP Schema的概念和基本要素
  4. linux勒索病毒名称,Linux 也有加密勒索病毒了,也有人真的中了
  5. python中使用函数的优点,对于python类使用“get函数”有什么好处?
  6. 代理模式中的静态代理
  7. Redis 为什么是单线程的?
  8. 用户中心 - 修改用户信息
  9. element-ui介绍
  10. 通过反射写一个通用的设置某个对象的某个属性为指定的值