对象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, 环视,零宽断言,总之就是匹配个位置,这个位置需要满足某种条件

Sizzle.selectors.match/leftMatch相关推荐

  1. Sizzle.selectors.relative [ 源代码分析 ]

    1 jQuery 对象Sizzle.selectors.relative中存放了块间关系符和相应的块间关系过滤函数,称为"块间关系过滤函数集" 块间关系符共同拥有4种,其含义和过滤 ...

  2. jQuery技术内幕:深入解析jQuery架构设计与实现原理1

    jQuery技术内幕:深入解析jQuery架构设计与实现原理 高 云 著 图书在版编目(CIP)数据 jQuery技术内幕:深入解析jQuery架构设计与实现原理 / 高云著. -北京:机械工业出版社 ...

  3. Sizzle 官方API翻译

    Sizzle源码解析[原创内容,欢迎转载,如有错误,概不负责~~] Sizzle官方文档上说,Sizzle Api由三个部分构成. Public API - 用户使用 Extension API - ...

  4. JQuery - Sizzle选择器引擎原理分析

    说明:14年学习的jquery源码,搬到这里供大家交流.原文地址:https://segmentfault.com/a/1190000003933990 一.前言 Sizzle原来是jQuery里面的 ...

  5. Sizzle.filter [ 源码分析 ]

    最近一直在研究Sizzle选择器,对于其中的原理确实不得不佩服! Sizzle中的filter方法,主要负责块表达式过滤元素集合,在方法内部会调用Sizzle.selector.fitler方法执行过 ...

  6. jquery--选择器sizzle源码分析

    1 (function( window, undefined ) {2 3 vari,4 cachedruns,//正在匹配第几个元素 5 Expr, //Sizzle.selectors的快捷方式 ...

  7. jQuery1.11源码分析(8)-----jQuery调用Sizzle引擎的相关API

    之所以把这部分放在这里,是因为这里用到了一些基本API,前一篇介绍过后才能使用. //jQuery通过find方法调用Sizzle引擎 //jQuery通过find方法调用Sizzle引擎 jQuer ...

  8. jQuery源码学习(5)-Sizzle选择器(1)

    1.常见的选择器: #test表示id为test的DOM节点 .aaron 表示class为aaron的DOM节点 nav>li 表示在nav内部子li的样式,而不是所有的后代元素,只是往下一层 ...

  9. 深入学习jquery源码之jQuery的选择器引擎Sizzle(一)

    深入学习jquery源码之jQuery的选择器引擎Sizzle Sizzle是一个纯javascript CSS选择器引擎.jquery1.3开始使用sizzle,Sizzle一反传统采取了相反的Ri ...

最新文章

  1. linux高可用集群(HA)原理详解
  2. SpringBoot+Mybatis多模块(module)项目搭建教程
  3. 线段树--codevs 1690 开关灯
  4. 1.18.2.10 解释表:Table.explain、物理执行计划等
  5. JAVA编写的7个规范
  6. 程序员面试金典 - 面试题 10.11. 峰与谷(排序/不排序)
  7. mysql中pi是什么意思_MySQL 基础知识与常用命令
  8. ArcCatalog中将SQLServer中的空间数据导入到Oracle库中
  9. struts mysql乱码_Struts+Hibernate+MyEclipse+Tomcat+MySQL的乱码之解决
  10. 创业公司专题数据(包含stata多种模型代码)
  11. 用R语言看武汉市武昌区房租出租情况
  12. office word doc中无法输入英文双引号
  13. 华为云账号登录流程和方法
  14. 深圳高交会ZDNS发布域名服务安全威胁管控系统,为互联网入口保驾护航
  15. 使用Docker容器,这些错误千万别犯
  16. ESP8266 Arduino-FLASH按钮电平驱动LED灯翻转
  17. 【分享】常见的打印机无法共享12个问题汇总
  18. 如何编写Linux 下的 USB 键盘驱动
  19. 积分系统对产品的重要性
  20. 从自动化到智能化,网易杭研的AIOps探索与实践

热门文章

  1. cad2014打开文件崩溃_CAD玩的再牛,崩溃了咋办?
  2. iphone储存空间系统怎么清理_教你快速清理 iPhone 系统缓存垃圾,拒绝卡顿!
  3. php post 微信沙箱,微信支付平台错误:获取沙箱密钥失败,确保交易密钥是
  4. vscode设置templates_在VScode中创建你的代码模板的方法
  5. poj 3352Road Construction(无向双连通分量的分解)
  6. java中的printnb_javaI/O系统笔记
  7. 重新打开_iPhone 应用停止响应或无法打开的解决办法
  8. Positional Encodings in ViTs 近期各视觉Transformer中的位置编码方法总结及代码解析 1
  9. java基础知识点_JAVA基础知识
  10. 10分钟用python编写贪吃蛇小游戏_牛得一批!10分钟用Python编写一个贪吃蛇小游戏...