jQuery源碼中的chunker 正則過濾符分析
這是Jq中最長(zhǎng)的一個(gè)正則了,也研究了很久,一直很懵懂,感覺還是通過調(diào)試,然后一步一步的分析值理解起來比較容易,
我嘗試做成圖形比較直觀一點(diǎn),以不同的顏色區(qū)分了一下,如下圖:

分組一是通過以下代碼逐一拆分成一個(gè)數(shù)組的:
// 此處循環(huán)的作用是拆分每個(gè)選擇器到 parts 數(shù)組,比如div#id>p ul li 拆分成['div#id','>','p','ul','li']
while ( (chunker.exec(""), m = chunker.exec(soFar)) !== null ) {
// soFar存儲(chǔ)的是過濾了第一層后的選擇符字符串,也就是圖片上的分組三
soFar = m[3];
//選擇器塊第一部分推入數(shù)組
parts.push( m[1] );
// 如果拆分到了逗號(hào)的地方',',則前一組結(jié)束,跳出循環(huán),到另外一組選擇器了
if ( m[2] ) {
// 記錄另外一組選擇器
extra = m[3];
break;
}
}
其它的比如ID,class之類的就好理解了
match: {
// \u00c0-\uFFFF 匹配多個(gè)國(guó)家或名族的字母文字
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')
}
未完待續(xù)……
- jQuery.prototype.init選擇器構(gòu)造函數(shù)源碼思路分析
- 通過jQuery源碼學(xué)習(xí)javascript(三)
- 通過jQuery源碼學(xué)習(xí)javascript(二)
- 通過jQuery源碼學(xué)習(xí)javascript(一)
- 基于jquery的圖片幻燈展示源碼
- 查看源碼的工具 學(xué)習(xí)jQuery源碼不錯(cuò)的工具
- jQuery源碼分析-05異步隊(duì)列 Deferred 使用介紹
- jQuery源碼分析-04 選擇器-Sizzle-工作原理分析
- jQuery源碼分析-03構(gòu)造jQuery對(duì)象-工具函數(shù)
- jQuery源碼分析-03構(gòu)造jQuery對(duì)象-源碼結(jié)構(gòu)和核心函數(shù)
- jQuery源碼分析-02正則表達(dá)式 RegExp 常用正則表達(dá)式
- jQuery源碼分析-01總體架構(gòu)分析
- jQuery源碼分析之jQuery中的循環(huán)技巧詳解
相關(guān)文章
jquery ajax分頁(yè)插件的簡(jiǎn)單實(shí)現(xiàn)
這篇文章主要介紹了jquery ajax分頁(yè)插件的簡(jiǎn)單實(shí)現(xiàn)的相關(guān)資料,需要的朋友可以參考下2016-01-01JQuery操作textarea,input,select,checkbox方法
本文給大家匯總介紹了一些JQuery操作textarea,input,select,checkbox的方法和技巧,十分的簡(jiǎn)單實(shí)用,都是小編項(xiàng)目中使用過的,這里推薦給大家。2015-09-09flag和jq on 的綁定多個(gè)對(duì)象和方法(必看)
下面小編就為大家?guī)硪黄猣lag和jq on 的綁定多個(gè)對(duì)象和方法(必看)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-02-02jquery鼠標(biāo)放上去顯示懸浮層即彈出定位的div層
這篇文章主要介紹了使用jquery實(shí)現(xiàn)的鼠標(biāo)放上去顯示懸浮層即彈出定位的div層,需要的朋友可以參考下2014-04-04jquery通過select列表選擇框?qū)Ρ砀駭?shù)據(jù)進(jìn)行過濾示例
這篇文章主要介紹了jquery通過select列表選擇框?qū)Ρ砀駭?shù)據(jù)進(jìn)行過濾示例,需要的朋友可以參考下2014-05-05jQuery Pagination分頁(yè)插件_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
此jQuery插件為Ajax分頁(yè)插件,一次性加載,故分頁(yè)切換時(shí)無刷新與延遲,如果數(shù)據(jù)量較大不建議用此方法,因?yàn)榧虞d會(huì)比較慢。下面通過本文給大家分享jQuery Pagination分頁(yè)插件的使用方法及參數(shù)介紹,感興趣的朋友一起看看吧2017-07-07關(guān)于jquery form表單序列化的注意事項(xiàng)詳解
這篇文章主要給大家介紹了關(guān)于jquery form表單序列化的注意事項(xiàng),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面跟著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2017-08-08jQuery獲取文本節(jié)點(diǎn)之 text()/val()/html() 方法區(qū)別
在jquery中val,text,html都能取到值,或加一個(gè)參數(shù)來賦值,那么它們有些什么區(qū)別?2011-03-03jQuery實(shí)現(xiàn)的自定義滾動(dòng)條實(shí)例詳解
這篇文章主要介紹了jQuery實(shí)現(xiàn)的自定義滾動(dòng)條,結(jié)合完整實(shí)例詳細(xì)分析了jQuery自定義滾動(dòng)條的實(shí)現(xiàn)步驟與相關(guān)操作技巧,并給出了jquery.jscroll.js插件的完整代碼,需要的朋友可以參考下2016-09-09