注:分析的是Sizzle.js最新版本(截至2011-12-21)
1. chunker那段表达式:
先可以分为3大段:
((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~]) (*1)
(\s*,\s*)? (*2)
((?:.|\r|\n)*) (*3)
其中,第(*2)部分为逗号和空格组成的分隔符,用于切分需要匹配的字符串。
第一部分可以继续细分为:
(?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+ (*1.1)
|
[>+~] (*1.2)
)
其中,(*1.2)为Sizzle关系选择符集合。 对(*1.1)继续拆分:
(
?:
\((?:\([^()]+\)|[^()]+)+\) (*1.1.1)
|
\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\] (*1.1.2)
|
\\. (*1.1.3)
|
[^ >+~,(\[\\]+ (*1.1.4)
)+
对得到的4个单元依次分析:
(*1.1.1)还可以拆分:
\((
?:
\([^()]+\)
|
[^()]+
)+\)
作用?
\[(
?:
\[[^\[\]]*\]
|
['"][^'"]*['"]
|
[^\[\]'"]+
)+\]