jquery的正则表达式-jQuery 的正则表达式

从这篇文章开始,我将陆续更新关于jQuery源码的博客。 首先,jQuery源码分析仍然是我的一个计划和追求。 查看jQuery源码,探索大牛们的深层思考和精神碰撞。 Google一下不难发现探索jQuery的人不在少数。 可以看出jQuery的整体结构和模式的创建是耐人寻味的。 这个系列属于我原创,高调,细致的心态,开始我的jQuery之旅。 这次阅读 jQuery 1.9.1。

正则表达式解析

一:如果想看源码,就必须了解jquery上的规律。 在看源码之前,我感觉jquery是离不开规律性的。 下面 jQuery 使用的全局标量都是常规的。

为了让我们看懂后续的代码,首先要过好基本功。

二:正则性,基础的就不讲了,主要讲一些比较难的括号/()/匹配及其常见的搭配?,?:,?!。

1.贪婪与非贪婪。

当我们在正则表达式中使用重复匹配字符时,我们会匹配尽可能多的字符,让后续匹配的正则表达式能够继续匹配。 /a{3,}/ 至少匹配 3 个 a,所以 /a{3,}/ 可以匹配 aaas,也可以匹配 aaaaaasd,但它会匹配尽可能多的,比如 aaa,aaaaaaaas 中的 aaas 匹配的是 aaaaaaaa。 这称为贪婪匹配。 我们还可以使用正则表达式进行非贪婪匹配。 只需要在匹配的正则表达式前面加一个问号即可:“??”、“+?”、“{3,5}?”、“*?”。 他的意思是尽可能少的比赛。 比如刚才的/a{3,}/匹配3个及以上连续a,/a{3,}?/也匹配3个及以上连续ajquery的正则表达式,但都是比较小的匹配。 使用aaaaaas作为匹配字符串,/a{3,}/实际匹配字符串为aaaaaa,/a{3,}?/实际匹配字符串为aaa。 这就是非贪婪匹配,可以理解为匹配项的最小匹配项。示例结果如下

但有时非贪婪模型并不是我们所期望的。 例如,/a+?d/ 匹配一个或多个连续的 a 和 ab,匹配字符为 aaaaad。 根据非贪婪匹配,你期望的是匹配最后一个a和d,并且实际上匹配所有它们。 这种贪心匹配也有同样的效果。 如图所示:

2. 选择、分组和引用。

这就是()要重点关注的作用。

a) “()”将单个项目变成一个表达式,以便处理独立的单位,如“|”、“*”、“+”和“?” 来处理。 例如,/java(script)?/ 可以匹配 java 和 javascript。 /(ab|cd)+|ef/ 可以匹配 ef 以及 ab 或 cd 的多次重复。

b) “()”定义完整模式内的子模式。 当正则表达式与目标字符串匹配时,可以提取与括号中的子表达式匹配的部分。 定义锚点,在符号“(?=”和“)”之间添加表达式,断言,即首先要匹配值子表达式。 例如 /java(script)?(?=:)/ 可以匹配 javascript: hello,但不能匹配 javascript nihao,因为没有断点。

同理,还有(?!),一个否定断言,表示“(?!”和“)”不需要匹配。 例如 /[Jj]ava(?!script)[a-zA-Zw]*/ 可以匹配 java、javasfdsfds,但不能匹配 javascript...

c) “()”的另一个用途是引用同一正则表达式后面的上述子表达式。 使用字符“”加数字n表示第n个括号中的匹配文本,注意是目标字符串的文本。 需要注意的是,由于单词表达式可以嵌套如/ad(dsfds(sd)+?)/,其位置为参与计数的左括号的位置n。 例如 /['"][^'"]+['"]/ 用于匹配单引号或双冒号内的字符,如“sdf”、“ds”、“fsa”、“fds”,但是如果要匹配中间冒号必须前后相同的字符,就需要使用引号,刚才的正则变体是:/(['"])[^'"]+1/ .有时候,正则表达式括号里有多个子表达式,但是有些子表达式我不需要引号,怎么办?我们会用(?:)。表达式“?:”只用于分组,有无匹配效果,例如:

/([Jj]ava(?:[Sscript])?)siss(funw*) 其中 (?:[Sscript]) 仅用于分组,2 与 (funw 指代相同*) 匹配的文本。

三:jQuery的常规规则是什么?

core_pnum = /[+-]?(?:d*.|)d+(?:[eE][+-]?d+|)/.source,可见是数字匹配,包括正数和正数,以及科技规律的物理表示。

core_rnotwhite = /S+/g,简单,非空白(感谢您的原谅)

rtrim = /^[suFEFFxA0]+|[suFEFFxA0]+$/g ,表示不同序列编码的空间开始或结束

rquickExpr = /^(?:()[^>]*|#([w-]*))$/,表示html标签必须是“字符”或“#字符”

rsingleTag = /^(?:|)$/,表示html标签; 括号内有引文。

js正则表达式子表达式_jquery的正则表达式_js中的正则表达式的例子

rvalidchars = /^[],:{}s]*$/,表示json的常用符号,以及所有结束符号,如:{}],

rvalidbraces = /(?:^|:|,)(?:s*[)+/g,表示json链表的起始符号“[”或“:[”或“,[”

rvalidescape = /\(?:["\/bfnrt]|u[da-fA-F]{4})/g,表示富含/n、/b、/f、/r、/t或十六进制字符

rvalidtokens = /"[^"\rn]*"|true|false|null|-?(?:d+.|)d+(?:[eE][+-]?d+| )/g, 表示数字或 true,false,null,""

rmsPrefix = /^-ms-/,表示css的前缀,判断ie

rdashAlpha = /-([da-z])/gijquery的正则表达式,表示带“-”链接的数字或字符

总结:今天这部分就过关了,继续分析