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

    \[(

    ?:

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

    |

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

    |

    [^\[\]'"]+

    )+\]

  • 相关阅读:
    ES6模块开发+单文件组件
    Vue路由学习
    Vuex学习
    Vue组件
    Vue事件处理
    Git下载前后端代码步骤
    小黑记事本
    简单计算器
    ubuntu的基础命令
    拓扑排序以及求解关键路径
  • 原文地址:https://www.cnblogs.com/Langzi127/p/2295881.html
Copyright © 2011-2022 走看看