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 相关文章推荐
javascript cookie解码函数(兼容ff)
Mar 17 Javascript
javascript CSS画图之基础篇
Jul 29 Javascript
JavaScript 创建对象和构造类实现代码
Jul 30 Javascript
js 操作select和option常用代码整理
Dec 13 Javascript
javascript实现 百度翻译 可折叠的分享按钮列表
Mar 12 Javascript
Sea.JS知识总结
May 05 Javascript
JavaScript之面向对象_动力节点Java学院整理
Jun 29 Javascript
js字符串处理之绝妙的代码
Apr 05 Javascript
vue实现抖音时间转盘
Sep 08 Javascript
2019年度web前端面试题总结(主要为Vue面试题)
Jan 12 Javascript
JavaScript canvas动画实现时钟效果
Feb 10 Javascript
js防抖函数和节流函数使用场景和实现区别示例分析
Apr 11 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
台湾中原大学php教程孙仲岳主讲
2008/01/07 PHP
php中echo()和print()、require()和include()等易混淆函数的区别
2012/02/22 PHP
浅析php与数据库代码开发规范
2013/08/08 PHP
ThinkPHP提交表单时默认自动转义的解决方法
2014/11/25 PHP
通过源码解析Laravel的依赖注入
2018/01/22 PHP
JavaScript String.replace函数参数实例说明
2013/06/06 Javascript
javascript自动改变文字大小和颜色的效果的小例子
2013/08/02 Javascript
jQuery替换字符串(实例代码)
2013/11/13 Javascript
Javascript动态引用CSS文件的2种方法介绍
2014/06/06 Javascript
Javascript中innerHTML用法实例分析
2015/01/12 Javascript
Javascript基础教程之switch语句
2015/01/18 Javascript
Jquery on绑定的事件 触发多次实例代码
2016/12/08 Javascript
HTML的select控件美化
2017/03/27 Javascript
JavaScript实现简单的双色球(实例讲解)
2017/07/31 Javascript
vue视频播放暂停代码
2019/11/08 Javascript
vue 二维码长按保存和复制内容操作
2020/09/22 Javascript
[01:05:56]2018DOTA2亚洲邀请赛3月29日 小组赛A组 Newbee VS VG
2018/03/30 DOTA
用python写一个windows下的定时关机脚本(推荐)
2017/03/21 Python
解决pandas 作图无法显示中文的问题
2018/05/24 Python
python对csv文件追加写入列的方法
2019/08/01 Python
Django用户认证系统 组与权限解析
2019/08/02 Python
python 使用pygame工具包实现贪吃蛇游戏(多彩版)
2019/10/30 Python
Django实现图片上传功能步骤解析
2020/04/22 Python
python利用os模块编写文件复制功能——copy()函数用法
2020/07/13 Python
详解Pycharm安装及Django安装配置指南
2020/09/15 Python
日本动漫周边服饰销售网站:Atsuko
2019/12/16 全球购物
2014年元旦活动方案
2014/02/15 职场文书
《蝙蝠和雷达》教学反思
2014/04/23 职场文书
团日活动总结范文
2014/04/25 职场文书
创建青年文明号材料
2014/05/09 职场文书
新文化运动的基本口号
2014/06/21 职场文书
小学综合实践活动总结
2014/07/07 职场文书
学雷锋献爱心倡议书
2015/04/27 职场文书
银行求职信范文
2019/05/13 职场文书
PyTorch 如何自动计算梯度
2021/05/23 Python