菜鸟读jQuery 2.0.3 源码分析系列(2)
原文链接在这里,作为一个菜鸟,我就一边读一边写
我是菜鸟,推荐木有入门或者刚刚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。