在匹配类时,jQuery用于一种相对笨拙的方法,无论是目标节点的类名,还是表达式都要进行处理才能用。


match = " " + match[1].replace(/\\/g, "") + " ";
for (var i = 0, elem;(elem = curLoop[i]) != null; i++) {if ((elem.className && (" " + elem.className + " ").replace(/[\t\n\r]/g, " ").indexOf(match) >= 0)) {//*******************}
}

如果是match为.aaa还好,只用进行一次过滤,如果match为.aaa.bbb呢?!那么有没有更快的方法呢?有的。我们需要构造一个强大的正则出来,让它能同时匹配我们所需要的类名,可能是一个,也可能是多个,并且不分次序。拜群里的高手所赐了,这正则很快就解决了(我为我这个强大的智囊团而骄傲,从此不用上51js,javaeye,blueidea了……)。

<ul><li class="aaa bbb">符合</li><li class="bbb aaa">符合</li><li class="aaa ccc bbb">符合</li><li class="aaa">不符合 </li><li class="bbb">不符合 </li>
</ul>

比如,我们想匹配同时拥有aaa与bbb的这些LI元素,就要只需要把表达式转换成正则,直接test验证就行了,无需再对元素上的className进行处理。


var src = ""var escape = /([-.*+?^${}()|[\]\/\\])/g"aaa.bbb".replace(/[^.]+/g,function($){src += '(?=[\\s\\S]*(?:^|\\s)'+$.replace(escape, '\\$1')+'(?:\\s|$))'})var reg = new RegExp(src);var t1 = "aaa bbb"var t2 = "bbb aaa"var t3 = "aaa ccc bbb"var t4 = "aaa"var t5 = "bbb"alert(reg.test(t1))//truealert(reg.test(t2))//truealert(reg.test(t3))//truealert(reg.test(t4))//falsealert(reg.test(t5))//false

2011.1.27更好的方案


var src = ".aaa.bbb".replace(/([\/\[\]\:])/g,'\\$1')//替换className中允许的特殊字符
.replace(/\.([^.]+)/g,'(?=[\\s\\S]*(?:^|\\s)$1(?:\\s|$))');//匹配
var reg = new RegExp('^'+src);//加了^就匹配开头,不然发现不匹配还要找其他n个位置(n是字符串长度) by abcd
var t1 = "aaa bbb"
var t2 = "bbb aaa"
var t3 = "aaa ccc bbb"
var t4 = "aaa"
var t5 = "bbb"
alert(reg.test(t1))//true
alert(reg.test(t2))//true
alert(reg.test(t3))//true
alert(reg.test(t4))//false
alert(reg.test(t5))//false

className的高效匹配相关推荐

  1. 未名企鹅极客 | 医药数据管理中的短文本高效匹配技术

    大量行业数据.渠道流向数据在清洗的过程中,面临着诸多极大耗费人力的问题.在数据来源多样且格式不统一的情况下,人工匹配曾让很多信息员闻之色变.即使在人工智能和机器学习的时代下,由于各种原因导致的匹配误差 ...

  2. 聊天机器人中对话模板的高效匹配方法

    /* 版权声明:可以任意转载,转载时请标明文章原始出处和作者信息 .*/ author: 张俊林,黄通文,薛会萍 尽管深度学习目前在研发聊天机器人方面进行的如火如荼,但是这些技术距离真正实用还有不短的 ...

  3. 基于快速GeoHash,如何实现海量商品与商圈的高效匹配?

    阿里妹导读:闲鱼是一款闲置物品的交易平台APP.通过这个平台,全国各地"无处安放"的物品能够轻松实现流动.这种分享经济业务形态被越来越多的人所接受,也进一步实现了低碳生活的目标. ...

  4. 一种基于快速GeoHash实现海量商品与商圈高效匹配的算法

    摘要 闲鱼app根据交通条件.商场分布情况.住宅区分布情况综合考虑,将城市划分为一个个商圈.杭州部分区域商圈划分如下图所示.   闲鱼的商品是由用户发布的GPS随机分布在地图上的点数据.当用户处于某个 ...

  5. 基于快速GeoHash,如何实现海量商品与商圈的高效匹配?...

    小叽导读:闲鱼是一款闲置物品的交易平台APP.通过这个平台,全国各地"无处安放"的物品能够轻松实现流动.这种分享经济业务形态被越来越多的人所接受,也进一步实现了低碳生活的目标. 今 ...

  6. 基于快速GeoHash,如何实现海量商品与商圈的高效匹配

    闲鱼app根据交通条件.商场分布情况.住宅区分布情况综合考虑,将城市划分为一个个商圈.杭州部分区域商圈划分如下图所示. 闲鱼的商品是由用户发布的GPS随机分布在地图上的点数据.当用户处于某个商圈范围内 ...

  7. 【数据应用技巧】基于快速GeoHash,实现海量商品与商圈的高效匹配

    案例来源:@阿里技术 案例地址:https://mp.weixin.qq.com/s/vwhetMpQllczILptBNcoWg 0. 背景:闲鱼每天都有海量商品位置(点数据)与大量商圈(面数据)的 ...

  8. 打造专业仪器仪表B2B撮合交易平台,实现资源迅速整合与商品高效匹配

    我国是仪器仪表行业规模最大.品种最齐全.综合实力最强的一个国家,而且近年来相对于全球仪器仪表3%-4%的增长率.可见我国仪器仪表行业的发展速度非常快.尽管我国仪器仪表还处于发展中阶段,国产智能仪表的发 ...

  9. 字符串匹配算法 -- AC自动机 基于Trie树的高效的敏感词过滤算法

    文章目录 1. 算法背景 2. AC自动机实现原理 2.1 构建失败指针 2.2 依赖失败指针过滤敏感词 3. 复杂度及完整代码 1. 算法背景 之前介绍过单模式串匹配的高效算法:BM和KMP 以及 ...

最新文章

  1. 女生可以学习Web前端吗?
  2. js事件(Event)知识整理
  3. 国内C/C++刷题网站汇总
  4. 封装类(Merry May Day to all you who are burried in work ~)---2017-05-01
  5. windows搭建ABD环境 搭建ADB开发环境
  6. Image(支持 XML 序列化),注意C#中原生的Image类是无法进行Xml序列化的
  7. 小米电视共享计算机权限,小米电视局域网共享文件 小米盒子局域网共享视频通用方法...
  8. --legacy-peer-deps 作用
  9. 两步解决:PDF旋转后怎么保存?
  10. 云计算数据中心运维管理的重点
  11. 实现图片在时间轴左右交替放置
  12. java开发256g固态硬盘_256g固态硬盘有哪些
  13. 如何开发一款游戏?【游戏开发所需技能和开发流程】
  14. Unreal 后期处理材质范例
  15. 强化学习入门 Q-learning与SARSA
  16. 虚拟机 服务器 断电,意外断电自动启动服务器和虚拟机的教程
  17. 大猫老师小课堂搜索引擎专题:ElasticSearch 的使用方法
  18. Sql Server 数据库 表增加列字段
  19. Android Activity生命周期★
  20. 如何输入罗马数字I,II,III

热门文章

  1. 台式电脑可以练计算机二级嘛6,练习六-计算机二级考试OFFICE高级应用试卷与试题.pdf...
  2. vscode jsx html补全,VScode设置jsx语法自动补全
  3. php mysql购物车_php mysql购物车实现程序
  4. telnet给服务器发消息,[摘抄]使用telnet命令直接发送
  5. html标签一对一绑定的组件,一种原生组件替换HTML标签的轻量级方法尝试
  6. 爱奇艺的架构到底有多牛?
  7. mysql memcache搭建_Memcached 搭建过程
  8. hibernate mysql 存储过程_hibernate调用mysql存储过程
  9. C语言比较字符串长短
  10. dosbox edit.exe 如何使用_如何实现摄影后期无限色彩调色?Infinite Color