`
kongxiantao
  • 浏览: 112101 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Jquery 源码中的 正则表达式 分析

阅读更多

   刚刚整理了一下正则表达式,现在来分析一下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

 

分享到:
评论
1 楼 newsletterBroker 2011-03-31  
呵呵,感觉不错!

相关推荐

    jQuery源码分析-02正则表达式

    ### jQuery源码分析-02正则表达式 #### 正则表达式基础与应用 正则表达式是一种用于描述字符模式的强大工具,在多种编程语言中都有应用,其中包括JavaScript。在jQuery这样的JavaScript库中,正则表达式被广泛应用...

    基于jquery实现的密码强度正则表达式源码.zip

    在压缩包中的文件"132687023035988965"可能是实现这一功能的JavaScript源代码文件,可能包含了定义正则表达式的字符串以及使用jQuery绑定事件和处理验证逻辑的函数。为了更好地理解代码工作原理,你可以解压文件并...

    java正则表达式

    在给定的标签中,提到的"源码"可能暗示我们需要查看Java正则表达式的源代码,理解其内部实现机制。这有助于深入学习其工作原理,提高编程能力。而"工具"可能指的是利用Java正则表达式作为工具来处理文本数据,比如...

    jquery里的正则表达式说明

    在jQuery源码中,有一个非常关键的正则表达式用于处理传入的选择器字符串。该表达式如下所示: ```javascript var quickExpr = /^(?:[^&lt;]*(&lt;[\w\W]+&gt;)[^&gt;]*$|#([\w\-]+)$)/; ``` 接下来我们将逐步解析这个正则...

    JS实现表单输入正则表达式验证功能源码.zip

    本压缩包中的"JS实现表单输入正则表达式验证功能源码.zip"提供了使用JavaScript进行表单验证的方法,主要涉及以下几个核心知识点: 1. **正则表达式**:正则表达式(Regular Expression)是一种强大的文本处理工具...

    jquery源码 带格式

    通过以上对jQuery源码的部分分析,我们可以看出jQuery在设计上考虑了兼容性、性能以及安全性,采用了大量的正则表达式进行字符串和DOM元素的处理,并提供了丰富的工具函数和API来简化JavaScript的编程工作。

    jquery以及正则表达式入门学习

    包含的源代码文件以及jquery.js 博文链接:https://canofy.iteye.com/blog/142341

    jQuery源码中的chunker 正则过滤符分析

    正则表达式中的每个部分都是为了匹配不同类型的选择器而设计的。例如,匹配一个ID选择器,它会查找以“#”符号开始,后面跟着字母数字或特定字符的字符串。 在chunker正则表达式中,可以识别以下几种类型的选择器...

    Jqurey 源码分析

    在分析jQuery源码时,还会遇到正则表达式的使用,例如在选择器引擎Sizzle中,正则表达式被用来解析和验证CSS选择器。这些正则表达式可以帮助优化和提升选择器的性能。 例如,一个常见的数字正则表达式用于匹配正...

    jQuery 未压缩版本源码学习

    通过以上分析,我们可以看到jQuery未压缩版本源码的学习不仅涉及到了JavaScript的基础知识,还涵盖了DOM操作、字符串处理、浏览器兼容性等多个方面。这为我们深入理解和掌握jQuery的内部工作原理提供了宝贵的资料。

    java script

    在给定的项目源码中,可能包含了以下JavaScript正则表达式的应用场景: 1. **表单验证**:在`aboutMeEdit.html`中,可能使用JavaScript正则表达式来验证用户输入的数据,如邮箱地址、电话号码、日期格式等,确保...

    jquery源码好不容易找到的与大家分享

    1. **Sizzle选择器**:Sizzle的实现主要基于正则表达式,通过编译CSS选择器为执行函数,提高了查询性能。 2. **$.each()**:这是jQuery中的迭代器,用于遍历数组或对象,也是实现链式调用的关键。 3. **$.ready()*...

    jQuery源码

    《jQuery源码解析》 jQuery,作为一款广泛应用于前端开发的JavaScript库,因其简洁的API和强大的功能,深受开发者喜爱。本文将深入探讨jQuery 1.12版本的源码,帮助读者理解其核心机制,提升JavaScript技术能力。 ...

    JQuery源码注释

    Sizzle使用高效的数据结构和算法,如预编译的正则表达式,实现了高性能的选择器匹配。 2. **DOM操作** jQuery提供了丰富的DOM操作API,如`$(...)`用于创建jQuery对象,`.append()`和`.prepend()`用于元素插入,`....

    锋利的jQuery源码

    Sizzle使用正则表达式和DOM遍历来实现,这对于理解和提升我们的DOM操作技能至关重要。理解Sizzle的工作原理能让我们在编写高性能的DOM操作时更有底气。 其次,jQuery提供了优雅的链式调用机制,这是其易用性的一大...

Global site tag (gtag.js) - Google Analytics