Sizzle.js分析

摘要:
:. | r|n)*)/g可以首先分成3个大段:。第一部分可以进一步细分为:((?:[^[]]*]|['“][^'”]*['“]|[^[]”]+)?

注:分析的是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)还可以拆分:

\[(

?:

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

|

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

|

[^\[\]'"]+

)+\]

免责声明:文章转载自《Sizzle.js分析》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇五 Android Capabilities讲解立足于运维与监控的前端框架 NoahV下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

Datax3.0使用说明

任务是DataX作业的最小单位。每个任务负责一些数据的同步。DataX的调度决策思想是:-DataXJob根据数据库和表划分为100个任务。...

微信扫码网页登录,redirect_uri参数错误解决方法

对于微信开放平台[管理中心/应用程序详细信息]中设置的[开发信息][授权回调域],只需填写域名,无需https://,也无需特定页面。您不需要填写完整的请求路径,如图所示:https://open.weixin.qq.com/connect/qrconnect?appid=您的APPID&direct_Uri=回调和响应的特定地址_type=code...

解决Windows 10每次重启默认浏览器都被重置为IE的一个办法

我的Windows10电脑每次设置默认浏览器重启后都会被重置为IE,这是个令人抓狂的问题。现在大部分浏览器都不支持IE浏览器了,如果每次点击外链都自动通过IE打开,则需要额外的操作手动拷贝粘贴到火狐打开,会影响工作效率。在网上找了各种各样的解决办法都不灵……再设置一次默认浏览器如下图所示,设置好了之后重启电脑试一下吧,祝你好运!...

VMP加壳(三):VMP壳爆破实战-破解某编辑类软件

同时,记住在内存视图中向VMP0段提供断点后继续单击确认按钮,以查看调用方法的位置(此处的返回地址为0x5E01E9),但此处返回push(或vm条目)。这个地方会是验证码检测的入口吗!通过字符串查找各种键提示(sn、不正确注册等)的内存:通过访问断点查找键代码,然后找出调用该函数的函数,这与JCC指令的距离更远。...

axios 处理超时问题 记录

前言:记录最近两天处理请求超时的逻辑。...

beego

Charset=utf8“)56//参数4(可选)设置最大空闲连接7//参数5modelorm.RegisterModelRegisterModelWithPrefix。使用表名前缀orm.RegisterModelWithPrefixbeego自动创建表。1//参数1使用默认数据库ORM接口使用1//查询操作2funread(){3o:=ORM.NewOr...