zoukankan      html  css  js  c++  java
  • Sizzle.js分析

    注:分析的是Sizzle.js最新版本(截至2011-12-21)

    1. chunker那段表达式:

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

     先可以分为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)还可以拆分:

    \((

    ?:

    \([^()]+\)

    |

    [^()]+

    )+\)

    作用?

    (*1.1.2)还可以拆分:

    \[(

    ?:

    \[[^\[\]]*\]

    |

    ['"][^'"]*['"]

    |

    [^\[\]'"]+

    )+\]

  • 相关阅读:
    scanf与scanf_s的区别
    PAT 1041 考试座位号
    PAT1018 锤子剪刀布
    Cookie
    JSP--原理
    多线程练习题
    Java线程--线程的同步与锁
    有关toString()和println(Object)
    Java Web请求和响应机制
    IO流
  • 原文地址:https://www.cnblogs.com/Langzi127/p/2295881.html
Copyright © 2011-2022 走看看