jQuery 2.0.3 源码分析系列

我是菜鸟,推荐木有入门或者刚刚JS入门摸不着边的看看,大大们手下留情,想一起学习的Jser可以给我留言。

今天写一点,第二篇jQuery选择器



// A simple way to check for HTML strings
//一个简单的方法来检查HTML字符串
// Prioritize #id over <tag> to avoid XSS via location.hash (#9521)
//优先处理#id为了避免通过XSS攻击
// Strict HTML recognition (#11290: must start with <)
//严格的HMLT识别
     rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,



 看到这个就知道哭瞎两个字怎么写了。。看来看去最后还是逃不脱正则的魔掌/(ㄒoㄒ)/~~

我先拆分一下这个正则吧。



^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$
?:\s*(<[\w\W]+>)[^>]*|#([\w-]*)
?:
\s*(<[\w\W]+>)[^>]*
|
#([\w-]*)



拆分之后就是上面了。
?: |

这个应该是一个正则表达方式,我看了文字描述始终有些不懂。之前看了,又忘掉啦!!等一会找篇文章看看复习下。



\s*(<[\w\W]+>)[^>]*
//这个代码再拆分
\s*//匹配任何空白字符,包括空格、制表符、换页符等等。
<[\w\W]+>
//    \w
匹配包括下划线的任何单词字符。等价于“[A-Za-z0-9_]”。
//  \W
匹配任何非单词字符。等价于“[^A-Za-z0-9_]”。
[^>]*//除了>括号结尾的0个或者多个



上面这个正则,的意思就是,匹配开头没有或者多个空白字符,
第二个字符是<中间有一个或者多个任意字符串(\w\W包括了所有字符)下一个字符是>,最后字符不是>结尾的字符串

 

3. #([\w-]*))$

  • 匹配结尾带上#号的任意字符,包括下划线与-

吐槽文章中的这一句话,实在是有歧义啊。。

应该这么理解。匹配以#号开头的任意字符串结尾。

(?:pattern)

匹配pattern但不获取匹配的子字符串,也就是说这是一个非获取匹配,不存储匹配的子字符串用于向后引用。这在使用或字符“(|)”来组合一个模式的各个部分是很有用。例如“industr(?:y|ies)”就是一个比“industry|industries”更简略的表达式。

 总结一下,上面的这个正则表达式所表达的是,匹配任何html标签和#id。