jQuery源碼中的chunker 正則過濾符分析
更新時間:2012年07月31日 23:52:03 作者:
這是Jq中最長的一個正則了,也研究了很久,一直很懵懂,感覺還是通過調(diào)試,然后一步一步的分析值理解起來比較容易
復(fù)制代碼 代碼如下:
var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,
這是Jq中最長的一個正則了,也研究了很久,一直很懵懂,感覺還是通過調(diào)試,然后一步一步的分析值理解起來比較容易,
我嘗試做成圖形比較直觀一點,以不同的顏色區(qū)分了一下,如下圖:

分組一是通過以下代碼逐一拆分成一個數(shù)組的:
復(fù)制代碼 代碼如下:
// 此處循環(huán)的作用是拆分每個選擇器到 parts 數(shù)組,比如div#id>p ul li 拆分成['div#id','>','p','ul','li']
while ( (chunker.exec(""), m = chunker.exec(soFar)) !== null ) {
// soFar存儲的是過濾了第一層后的選擇符字符串,也就是圖片上的分組三
soFar = m[3];
//選擇器塊第一部分推入數(shù)組
parts.push( m[1] );
// 如果拆分到了逗號的地方',',則前一組結(jié)束,跳出循環(huán),到另外一組選擇器了
if ( m[2] ) {
// 記錄另外一組選擇器
extra = m[3];
break;
}
}
其它的比如ID,class之類的就好理解了
復(fù)制代碼 代碼如下:
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')
}
未完待續(xù)……
您可能感興趣的文章:
- jQuery.prototype.init選擇器構(gòu)造函數(shù)源碼思路分析
- 通過jQuery源碼學(xué)習(xí)javascript(三)
- 通過jQuery源碼學(xué)習(xí)javascript(二)
- 通過jQuery源碼學(xué)習(xí)javascript(一)
- 基于jquery的圖片幻燈展示源碼
- 查看源碼的工具 學(xué)習(xí)jQuery源碼不錯的工具
- jQuery源碼分析-05異步隊列 Deferred 使用介紹
- jQuery源碼分析-04 選擇器-Sizzle-工作原理分析
- jQuery源碼分析-03構(gòu)造jQuery對象-工具函數(shù)
- jQuery源碼分析-03構(gòu)造jQuery對象-源碼結(jié)構(gòu)和核心函數(shù)
- jQuery源碼分析-02正則表達(dá)式 RegExp 常用正則表達(dá)式
- jQuery源碼分析-01總體架構(gòu)分析
- jQuery源碼分析之jQuery中的循環(huán)技巧詳解
相關(guān)文章
Jquery綁定事件(bind和live的區(qū)別介紹)
Jquery中綁定事件有三種方法click、bind、live第一種方法很好理解,其實就和普通JS的用法差不多,只是少了一個on而已第二、三種方法都是綁定事件2013-08-08
基于JavaScript如何實現(xiàn)ajax調(diào)用后臺定義的方法
由于ajax的獨特優(yōu)勢,使得它在當(dāng)前大量網(wǎng)站得到了廣泛的應(yīng)用,下面就介紹一下ajax如何調(diào)用后臺定義的函數(shù),對ajax調(diào)用后臺方法相關(guān)知識感興趣的朋友一起學(xué)習(xí)吧2015-12-12
jquery實現(xiàn)文字由下到上循環(huán)滾動的實例代碼
這篇文章介紹了jquery實現(xiàn)文字由下到上循環(huán)滾動的實例代碼,有需要的朋友可以參考一下2013-08-08
QRCode.js:基于JQuery的生成二維碼JS庫的使用
本篇文章主要介紹了QRCode.js:基于JQuery的生成二維碼JS庫的使用,具有一定的參考價值,有興趣的同學(xué)可以了解一下2017-06-06
jQuery ajax請求struts action實現(xiàn)異步刷新
這篇文章主要為大家詳細(xì)介紹了JQuery ajax請求struts action實現(xiàn)異步刷新,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-04-04

