刚刚整理了一下正则表达式,现在来分析一下Jquery中的正则表达式,就当复习了,理解不正确的,希望路过的高手指点
1. quickExpr = /^(?:[^<]*(<[\w\W]+>)[^>]*$|#([\w\-]+)$)/ (I)
源码中的解释是:A simple way to check for HTML strings or ID strings (both of which we optimize for),都理解就不翻译了。
先由中间的“|”把 (I) 拆成3部分
[^<]*(<[\w\W]+>)[^>]*$ (A)
#([\w\-]+)$ (B)
^(?: ) (C) 表示不记录子正则表达式(A)或(B)的匹配结果
先分析(A) 式,它可以接着拆成如下
[^<]*(<[\w\W]+>) (D)
[^>]* (E) 非>的字符出现0次或多次
$ (F) 结束
接着在拆分(D)
[^<]* 非<的字符出现0次或多次
(<[\w\W]+>) (G)
\w表示单词字符,等同于字符集合[a-zA-Z0-9_],\W表示非单词字符,等效于[^a-zA-Z0-9_],"+"表示出现一次或多次
由此可知(G) 的意思就是 :在“<”和“>”之间有一个或多个字符
故(A)的意思就是:没有或多个非“<”字符 + 在“<”和“>”之间有一个或多个字符 + 没有或多个 非“>”的字符。简单的说就是
$("<ul>")不识别,而它$(" ul "),$("aaa"),$(" ... ")能识别。
在看(B)第一个字符时“#”,后面紧跟一个或多个[a-zA-Z0-9_-]字符,Jquery中识别ID的
$("#.?")不能识别,$("#aaaaa kkk")也不能识别。
呵呵,现在明白了(I)的意思了。识别html标签和ID值,你可能要问了$("aaaa"),他也能识别,可它不是html标签啊,这个Jquery下面有
if ( selector.nodeType ) {
this.context = this[0] = selector;
this.length = 1;
return this;
}
中作了判断。
关于 nodeType 的介绍,Google介绍的不少。
2. isSimple = /^.[^:#\[\.,]*$/, (II )
源码中的解释是 : Is it a simple selector
这个好理解,还是拆开来说,
^.(B)$ (A)
[^:#\[\.,]* (B)
(B)的意思是说 非“:”,非“#”,非“[”,非“.”的字符或“,”没有或出现多次
所以(II)的意思就是说:它匹配以一个除了换行字符的字符开始 ,以没有或者多个非“:”,非“#”,非“[”,非“.”的字符结束。
呵呵,由此看出,$(" "),它是匹配的。 isSimple 在源码有只有一个地方用它了。Jquery API中filter 和not方法用isSimple,
它在Jquery中的作用现在还不明白,待研究。
3. rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>)?$/ (III)
源码中的解释是 : Match a standalone tag
现在拆分它 :
<(\w+)\s*\/?> (A)
(?:<\/\1>)? (B)
现在分析(A)
< 就是 “<”
(\w+) 一个或多个单词字符 [a-zA-Z0-9_]
\s* 没有或多个空白字符
\/? 没有或一个“/”
> 就是“>”
现在分析(B),还是拆分它
<\/\1> (C) 意思是:一个“</” 后跟和(\w+)一样的值 在加上 ">"
(?:(C))? (D)没有或一个(B)
现在明白的,就是和源码中解释的一样,匹配独立的标签。
4. 先到这,剩下的后面再说。
// JSON RegExp
rvalidchars = /^[\],:{}\s]*$/,
rvalidescape = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,
rvalidtokens = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,
rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g,
// Useragent RegExp
rwebkit = /(webkit)[\/]([\w.]+)/,
ropera = /(opera)(?:.*version)?[ \/]([\w.]+)/,
rmsie = /(msie) ([\w.]+)/,
rmozilla = /(mozilla)(?:.*? rv:([\w.]+))?/,
终于扫除了看Jquery源码的有一个拦路虎啊。嘿嘿
这里有篇相关的文章:
地址:http://jmrware.com/articles/2010/jqueryregex/jQueryRegexes.html
分享到:
相关推荐
### jQuery源码分析-02正则表达式 #### 正则表达式基础与应用 正则表达式是一种用于描述字符模式的强大工具,在多种编程语言中都有应用,其中包括JavaScript。在jQuery这样的JavaScript库中,正则表达式被广泛应用...
在压缩包中的文件"132687023035988965"可能是实现这一功能的JavaScript源代码文件,可能包含了定义正则表达式的字符串以及使用jQuery绑定事件和处理验证逻辑的函数。为了更好地理解代码工作原理,你可以解压文件并...
在给定的标签中,提到的"源码"可能暗示我们需要查看Java正则表达式的源代码,理解其内部实现机制。这有助于深入学习其工作原理,提高编程能力。而"工具"可能指的是利用Java正则表达式作为工具来处理文本数据,比如...
在jQuery源码中,有一个非常关键的正则表达式用于处理传入的选择器字符串。该表达式如下所示: ```javascript var quickExpr = /^(?:[^<]*(<[\w\W]+>)[^>]*$|#([\w\-]+)$)/; ``` 接下来我们将逐步解析这个正则...
本压缩包中的"JS实现表单输入正则表达式验证功能源码.zip"提供了使用JavaScript进行表单验证的方法,主要涉及以下几个核心知识点: 1. **正则表达式**:正则表达式(Regular Expression)是一种强大的文本处理工具...
通过以上对jQuery源码的部分分析,我们可以看出jQuery在设计上考虑了兼容性、性能以及安全性,采用了大量的正则表达式进行字符串和DOM元素的处理,并提供了丰富的工具函数和API来简化JavaScript的编程工作。
包含的源代码文件以及jquery.js 博文链接:https://canofy.iteye.com/blog/142341
正则表达式中的每个部分都是为了匹配不同类型的选择器而设计的。例如,匹配一个ID选择器,它会查找以“#”符号开始,后面跟着字母数字或特定字符的字符串。 在chunker正则表达式中,可以识别以下几种类型的选择器...
在分析jQuery源码时,还会遇到正则表达式的使用,例如在选择器引擎Sizzle中,正则表达式被用来解析和验证CSS选择器。这些正则表达式可以帮助优化和提升选择器的性能。 例如,一个常见的数字正则表达式用于匹配正...
通过以上分析,我们可以看到jQuery未压缩版本源码的学习不仅涉及到了JavaScript的基础知识,还涵盖了DOM操作、字符串处理、浏览器兼容性等多个方面。这为我们深入理解和掌握jQuery的内部工作原理提供了宝贵的资料。
在给定的项目源码中,可能包含了以下JavaScript正则表达式的应用场景: 1. **表单验证**:在`aboutMeEdit.html`中,可能使用JavaScript正则表达式来验证用户输入的数据,如邮箱地址、电话号码、日期格式等,确保...
1. **Sizzle选择器**:Sizzle的实现主要基于正则表达式,通过编译CSS选择器为执行函数,提高了查询性能。 2. **$.each()**:这是jQuery中的迭代器,用于遍历数组或对象,也是实现链式调用的关键。 3. **$.ready()*...
《jQuery源码解析》 jQuery,作为一款广泛应用于前端开发的JavaScript库,因其简洁的API和强大的功能,深受开发者喜爱。本文将深入探讨jQuery 1.12版本的源码,帮助读者理解其核心机制,提升JavaScript技术能力。 ...
Sizzle使用高效的数据结构和算法,如预编译的正则表达式,实现了高性能的选择器匹配。 2. **DOM操作** jQuery提供了丰富的DOM操作API,如`$(...)`用于创建jQuery对象,`.append()`和`.prepend()`用于元素插入,`....
Sizzle使用正则表达式和DOM遍历来实现,这对于理解和提升我们的DOM操作技能至关重要。理解Sizzle的工作原理能让我们在编写高性能的DOM操作时更有底气。 其次,jQuery提供了优雅的链式调用机制,这是其易用性的一大...