2012年7月31日星期二

jQuery源码中的chunker 正则过滤符分析

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: