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 相关文章推荐
JS网络游戏-(模拟城市webgame)提供的一些例子下载
Oct 14 Javascript
刷新页面实现方式总结(HTML,ASP,JS)
Nov 13 Javascript
获取内联和链接中的样式(js代码)
Apr 11 Javascript
JavaScript实现的圆形浮动标签云效果实例
Aug 06 Javascript
jquery validate表单验证的基本用法入门
Jan 18 Javascript
jQuery禁用键盘后退屏蔽F5刷新及禁用右键单击
Jan 22 Javascript
Angular.js与Bootstrap相结合实现手风琴菜单代码
Apr 13 Javascript
jQuery实现的checkbox级联选择下拉菜单效果示例
Dec 26 Javascript
js学使用setTimeout实现轮循动画
Jul 17 Javascript
详解react-webpack2-热模块替换[HMR]
Aug 03 Javascript
一种angular的方法级的缓存注解(装饰器)
Mar 13 Javascript
Vue通过配置WebSocket并实现群聊功能
Dec 31 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中通过smtp发邮件的类,测试通过
2007/01/22 PHP
php 日期和时间的处理-郑阿奇(续)
2011/07/04 PHP
php+mysqli预处理技术实现添加、修改及删除多条数据的方法
2015/01/30 PHP
Laravel中扩展Memcached缓存驱动实现使用阿里云OCS缓存
2015/02/10 PHP
php获得文件大小和文件创建时间的方法
2015/03/13 PHP
自己开发Dojo的建议框架
2008/09/24 Javascript
javascript radio 联动效果
2009/03/04 Javascript
在IE下获取object(ActiveX)的Param的代码
2009/09/15 Javascript
jQuery性能优化28条建议你值得借鉴
2013/02/16 Javascript
Jquery操作下拉框(DropDownList)实现取值赋值
2013/08/13 Javascript
window.open()详解及浏览器兼容性问题示例探讨
2014/05/29 Javascript
javascript实现俄罗斯方块游戏的思路和方法
2015/04/27 Javascript
jQuery实现的背景动态变化导航菜单效果
2015/08/24 Javascript
js计算文本框输入的字符数
2015/10/23 Javascript
AngularJS中实现显示或隐藏动画效果的方式总结
2015/12/31 Javascript
js老生常谈之this,constructor ,prototype全面解析
2016/04/05 Javascript
jQuery事件绑定用法详解
2016/09/08 Javascript
Bootstrap如何创建表单
2016/10/21 Javascript
零基础写python爬虫之使用urllib2组件抓取网页内容
2014/11/04 Python
Django自定义分页效果
2017/06/27 Python
python使用matplotlib库生成随机漫步图
2018/08/27 Python
Python解析Excle文件中的数据方法
2018/10/23 Python
python3.8.1+selenium实现登录滑块验证功能
2020/05/22 Python
浅谈Python中文件夹和python package包的区别
2020/06/01 Python
html5生成柱状图(条形图)效果的实例代码
2016/03/25 HTML / CSS
家得宝加拿大家装网上商店:The Home Depot加拿大
2016/08/27 全球购物
金融专业个人求职信
2013/09/22 职场文书
计算机网络工程专业职业生涯规划书
2014/03/10 职场文书
大学新闻系自荐书
2014/05/31 职场文书
安全生产标语
2014/06/06 职场文书
市场调查策划方案
2014/06/10 职场文书
幸福家庭标语
2014/06/27 职场文书
沈阳故宫导游词
2015/01/31 职场文书
服装店员工管理制度
2015/08/07 职场文书
2016最新离婚协议书范本及程序
2016/03/18 职场文书
网络新闻该怎么写?这些写作技巧你都知道吗?
2019/08/26 职场文书