jQuery源码中的chunker 正则过滤符分析


Posted in Javascript onJuly 31, 2012
var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,

这是Jq中最长的一个正则了,也研究了很久,一直很懵懂,感觉还是通过调试,然后一步一步的分析值理解起来比较容易,

我尝试做成图形比较直观一点,以不同的颜色区分了一下,如下图:

jQuery源码中的chunker 正则过滤符分析
分组一是通过以下代码逐一拆分成一个数组的:

// 此处循环的作用是拆分每个选择器到 parts 数组,比如div#id>p ul li 拆分成['div#id','>','p','ul','li'] 
while ( (chunker.exec(""), m = chunker.exec(soFar)) !== null ) { 
// soFar存储的是过滤了第一层后的选择符字符串,也就是图片上的分组三 
soFar = m[3]; 
//选择器块第一部分推入数组 
parts.push( m[1] ); 
// 如果拆分到了逗号的地方',',则前一组结束,跳出循环,到另外一组选择器了 
if ( m[2] ) { 
// 记录另外一组选择器 
extra = m[3]; 
break; 
} 
}

其它的比如ID,class之类的就好理解了
match: { 
// \u00c0-\uFFFF 匹配多个国家或名族的字母文字 
ID: /#((?:[\w\u00c0-\uFFFF-]|\\.)+)/, //如:#myId 
CLASS: /\.((?:[\w\u00c0-\uFFFF-]|\\.)+)/, // 如:.myClass 
NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF-]|\\.)+)['"]*\]/, //如:[name="myName"] 
ATTR: /\[\s*((?:[\w\u00c0-\uFFFF-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/, //如:[attribute="value"] 
TAG: /^((?:[\w\u00c0-\uFFFF\*-]|\\.)+)/, //如:div p a 
CHILD: /:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/, //如::first-child or :nth-child(5n+1) 
POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/, //如::nth(3) span 
PSEUDO: /:((?:[\w\u00c0-\uFFFF-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/ // :jlkj\kjl('kl(kklk)kl') 
}

未完待续……
Javascript 相关文章推荐
document.documentElement && document.documentElement.scrollTop
Dec 01 Javascript
javascript面向对象之二 命名空间
Feb 08 Javascript
Extjs中ComboBox加载并赋初值的实现方法
Mar 22 Javascript
jQuery 2.0.3 源码分析之core(一)整体架构
May 27 Javascript
html文本框提示效果的示例代码
Jun 28 Javascript
Javascript定义类(class)的三种方法详解
Mar 13 Javascript
jquery对象和DOM对象的任意相互转换
Feb 21 Javascript
jQuery Dialog对话框事件用法实例分析
May 10 Javascript
JS实现带导航城市列表以及输入搜索功能
Jan 04 Javascript
npm 下载指定版本的组件方法
May 17 Javascript
小程序如何在不同设备上自适应生成海报的实现方法
Aug 20 Javascript
关于jquery ajax 调用带参数的webservice返回XML数据一个小细节
Jul 31 #Javascript
基于jquery的点击链接插入链接内容的代码
Jul 31 #Javascript
基于jQuery实现的百度导航li拖放排列效果,即时更新数据库
Jul 31 #Javascript
基于jQuery的动态增删改查表格信息,可左键/右键提示(原创自Zjmainstay)
Jul 31 #Javascript
jQuery.each()用法分享
Jul 31 #Javascript
artDialog 4.1.5 Dreamweaver代码提示/补全插件 附下载
Jul 31 #Javascript
JavaScript中的私有/静态属性介绍
Jul 26 #Javascript
You might like
2020年4月放送!《Princess Connect Re:Dive》制作组 & 角色声优公开!
2020/03/06 日漫
整理的一些实用WordPress后台MySQL操作命令
2013/01/07 PHP
常用PHP框架功能对照表
2014/10/23 PHP
php连接oracle数据库及查询数据的方法
2014/12/29 PHP
利用PHP自动生成印有用户信息的名片
2016/08/01 PHP
Yii2汉字转拼音类的实例代码
2017/04/18 PHP
laravel unique验证、确认密码confirmed验证以及密码修改验证的方法
2019/10/16 PHP
javascript模拟的Ping效果代码 (Web Ping)
2011/03/13 Javascript
JS实现带关闭功能的阿里妈妈网站顶部滑出banner工具条代码
2015/09/17 Javascript
关于Function中的bind()示例详解
2016/12/02 Javascript
ES6通过babel转码使用webpack使用import关键字
2016/12/13 Javascript
如何提高数据访问速度
2016/12/26 Javascript
JQuery获取鼠标进入和离开容器的方向
2016/12/29 Javascript
javascript实现滑动解锁功能
2017/03/22 Javascript
nodejs个人博客开发第五步 分配数据
2017/04/12 NodeJs
vue学习笔记之Vue中css动画原理简单示例
2020/02/29 Javascript
微信小程序实现抖音播放效果的实例代码
2020/04/11 Javascript
vue界面发送表情的实现代码
2020/09/11 Javascript
使用Python的内建模块collections的教程
2015/04/28 Python
python实现文本文件合并
2015/12/29 Python
Python json 错误xx is not JSON serializable解决办法
2017/03/15 Python
彻底理解Python list切片原理
2017/10/27 Python
python实现在IDLE中输入多行的方法
2018/04/19 Python
python3解析库lxml的安装与基本使用
2018/06/27 Python
python快速排序的实现及运行时间比较
2019/11/22 Python
keras load model时出现Missing Layer错误的解决方式
2020/06/11 Python
Python3爬虫发送请求的知识点实例
2020/07/30 Python
Python常用断言函数实例汇总
2020/11/30 Python
美国亚马逊旗下时尚女装网店:SHOPBOP(支持中文)
2020/10/17 全球购物
描述Cookie和Session的作用,区别和各自的应用范围,Session工作原理
2015/03/25 面试题
物流仓储计划书
2014/01/10 职场文书
幼儿园教师教育感言
2014/02/28 职场文书
公司优秀员工获奖感言
2014/08/14 职场文书
公务员考察材料范文
2014/12/23 职场文书
高中班主任评语
2014/12/30 职场文书
党员转正意见怎么写
2015/06/03 职场文书