Sizzle.selectors.match/leftMatch

对象Sizzle.selectors.match/leftMatch中存放了表达式类型和正则的映射,正则用于确定块表达式的类型,并解析其中的参数。

相关代码如下:

var Expr = Sizzle.selectors = {
    match : {
        ID: /#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,
        CLASS: /\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,
        NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*/,
        ATTR: /\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,
        TAG: /^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+/,
        CHILD: /:(only|nth|last|first)-child(?:\(\s*(even|odd|?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*\d+)?))\s*\))?/,
        POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,
        PSEUDO: /:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/
    }
}

var origPOS = Expr.match.POS,
    fescape = function(all, num) {
        return "\\" + (num - 0 + 1);
    };

for ( var type in Expr.match ) {
    Expr.match[ type ] = new RegExp( Expr.match[ type ].source + (/(?![^\[]*\])(?![^\(]*\))/.source) );
    Expr.leftMatch[ type ] = new RegExp ( /(^(?:.|\r|\n)*?)/.source + Expr.match[ type ].source.replace(/\\(\d+)/g, fescape) );
}

我不保证以上代码的正确性。良心起见,解释上面代码的一些难点

  1. \3,\2 应用前面匹配到的分组
  2. (?:) 表示匹配,但不计入分组
  3. (?=) 前瞻,look forward, 环视,零宽断言,总之就是匹配个位置,这个位置需要满足某种条件

与神兽党一起成长
be good to each other

神兽党有福了

7k 声望
95 粉丝
0 条评论
推荐阅读
制作一款浏览器插件-查询深圳图书馆馆藏
其他链接地址:[链接][链接]经两周的奋战,终于开发了这一款查询图书馆馆藏的浏览器插件,使用起来非常简单。一、插件说明1)当你打开豆瓣读书页,随便打开一本书的详情,就会在右边栏展示深圳图书馆可借阅的图书...

Honwhy阅读 954

Ajax实现搜索联想 搜索关键词提醒 无刷新搜索
通过javascript监听搜索框的内容,调用后端即可。(1)javascript监听搜索框的内容(2)把搜索框的关键词传给后端进行搜索(3)搜索到结果,遍历到页面

TANKING1阅读 4.7k

【永久开源】Pear Admin Layui 基于 Layui 的后台管理模板
Pear Admin Layui 是基于 Layui 的后台管理系统模板,扩展Layui原生UI样式,整合第三方开源组件,提供便捷快速的开发方式,延续LayuiAdmin的设计风格,持续完善的样式与组件的维护,基于异步Ajax的菜单构建,相对...

就眠仪式2阅读 7.1k评论 1

Promise: 异步编程的理解和使用
JavaScript 中,Promise 的流行是得益于 jQuery 的方法 jQuery.Deferred(),其他也有一些更精简独立的 Promise 库,例如:Q、When、Bluebird。

后除2阅读 891

js简单实现实时显示网速强度
在页面加载完成时也就是测速开始时定义一个轮询并保存一下当前时间,用一张不大不小的图片做测速,这里选了个百度的logo图,因为不用担心资源失效。注意在图片后添加 rd=_" +new Date().getTime(),否则浏览...

洛阳醉长安行阅读 2k

【html + 原生js】input标签上传多张图片后如何转成base64数据并返回
前景摘要,最近帮后端同事解决了一个问题,他需要取到多选图片上传后的每个图片的base64数据。话不多说,直接上代码吧!页面部分(页面需要引入jq方可正常运行) {代码...} 逻辑部分 {代码...} 输入结果如下图所...

前端小高阅读 818

封面图
详细的Ajax简单案例
静态页面表格内容如下一个简单的表格 {代码...} JS调用引入用JqueryGET方式查询POST方式提交 {代码...} 后台代码调用的后台,做了详细的备注。 保存数据位置直接输出返回,没有链接数据库 {代码...}

Json阅读 11

神兽党有福了

7k 声望
95 粉丝
宣传栏