old sizzle - chuck

阅读更多
var chunker = /((?: \((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g;

¥1 =  \((?:\([^()]+\)|[^()]+)+\)  // 不含有括号,或被括号包裹但包裹内容中没有括号的字符串,(abc)、(a(bc))
¥2 = \[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]
(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+ // [xxx] 、'xxx'、"xxx"、xxx,其中x为不含有'、"、[、]的元素
¥3 =  [^ >+~,(\[\\]+ // 不含有空格、>、+、~、,、(、[、\的元素

X = ((?:¥1|¥2|\\.|¥3)+|[>+~])(\s*,\s*)? ((?:.|\r|\n)*) 

$1 = (元素|[>+~]) 
$2 = 空格,空格
$3 = 剩下的部分或者\n\r

    do {
        chunker.exec( "" );
        m = chunker.exec( soFar );

        if ( m ) {
            soFar = m[3];

            parts.push( m[1] );

            if ( m[2] ) {
                extra = m[3];
                break;
            }
        }
    } while ( m );

你可能感兴趣的:(JavaScript)