日期:2014-05-16  浏览次数:20322 次

《JavaScript 语言精粹》 学习笔记 —— 第七章 正则表达式


第七章 正则表达式

7.1、在JavaScript中,正则表达式是对Perl版的改进和发展。
7.2、^ 表示一个字符串的开始,$表示一个字符串的结束。
7.3、(?: ...) 表示一个非捕获型分组(noncapturing group)。
7.4、( ... ) 表示一个捕获型分组(capturing group)。
7.5、[...] 表示一个字符类,[^?#] 表示一个字符类包含除 ? 和 # 之外的所有字符。
7.6、有两个方法来创建RegExp对象。优先采用正则表达式字面量。如下:
  但如果要使用RegExp构造器创建一个正则表达式,要多加小心,因为反斜杠在正则表达式和在字符串字面量中有不同的含义。通常需要双写反斜杠及对引号进行转义:
7.7、在RegExp中,有三个标志:g、i和m。
7.8、RegExp对象的属性
	属性			用法
	global			如果标志 g 被使用,值为 true
	ignoreCase		如果标志 i 被使用,值为 true
	lastIndex		下一次 exec 匹配开始的索引。初始值为 0
	multiline		如果 m 被使用,值为 true
	source			正则表达式源代码文本
7.9、一个正则表达式因子可以是一个字符、一个由圆括号包围的组、一个字符类,或者是一个转义序列。除了控制字符和特殊字符以外,所有的字符都将被按照字面处理:
  \ / [ ] ( ) { } ? + * | . ^ $
如果上面列出的字符按字面去【匹配,那么必须要一个 \ 前缀来进行转移。
7.10、正则表达式转义:
  \f是换页符,\n是换行符,\r是回车符,\t是制表符,\u允许指定一个Unicode字符来表示一个十六进制的常量
  \d 等同于 [0-9]
  \s 等同于 [\f\n\r\t\u000B\u0020\u00A0\u2028\u2029]。这是Unicode空白符的一个不完全子集。\S表示与其相反的:[^\f\n\r\t\u000B\u0020\u00A0\u2028\u2029]
  \w 等同于 [0-9A-Z_a-z]。\W则表示与其相反。
  \b 被指定为一个字的边界标志。
  \1 是指分组 1 所捕获到的文本的一个引用,\2指向分组2的引用,\3指向分组3的引用,以此类推。
7.11、正则表达式分组共有4种:捕获型、非捕获型、向前正向匹配和向前负向匹配
7.12、正则表达式字符类内部的转义规则和正则表达式因子相比稍有不同。[\b]是退格符。下面是在字符类中需要被转义的特殊字符:
  - / [ \ ] ^
7.13、正则表达式因子可以用一个正则表达式量词后缀,用来决定这个因子应该被匹配的次数。包围在一对花括号中的一个数字表示这个因子应该被匹配的次数。所以,/www/和/w{3}/等价。{3,6}将【匹配3、4、5或6次。{3,}匹配3次或更多次。
7.14、? 等同于 {0,1}。 * 等同于 {0,} + 则等同于 {1,}。
7.15、如果只有一个量词,则趋向于进行贪婪性的匹配,即匹配尽可能多的重复直至达到上限。如果这个量词还有一个额外的后缀?,那么则趋向于进行懒惰性匹配,即试图匹配尽可能少的必要重复。

总结:本章对正则略感并未深入,关于“捕获分组”即点到为止,也未触及“零宽断言”的概念(一个使用零宽断言的例子——《不包含字符串abc的正则表达式》)。《正则表达式30分钟入门教程》言简意赅地丰富并弥补了这些不足。


转载请注明出处:http://blog.csdn.net/xxd851116/article/details/7675079


1楼lidaasky2小时前
学习了