jQuery源码中的chunker 正则过滤符分析
这是Jq中最长的一个正则了吧,我也理解了很久,发出来大家给指证一下:
var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,
如图:
分组一是通过以下代码逐一拆分成一个数组的:
// 此处循环的作用是拆分每个选择器到 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; } }
是这样理解的吗,如果有误请留言指点,我也会根据后面的理解重新编辑的!
TAG: