JavaScript语言精粹笔记之正则表达式
在JS中,正则表达式被用来对字符串中的信息进行查找、替换和提取操作。通常来说,在JS中正则表达式相较于等效的字符串运算有着显著的性能优势。
可处理正则表达式的方法有:
- regexp.exec
- regexp.test
- string.match
- string.replace
- string.search
- string.split
这些方法的具体用法将在以后进行详细介绍。
JS中的正则表达式语法是对Perl版的改进和发展。JS正则表达式难以分段阅读,因为他们不支持注释和空白。
一个匹配URL的正则表达式:
正则表达式的创建
有两种创建正则表达式的方法:
- 使用正则表达式常量
正则表达式常量是被包含在一对斜杠中的特殊的字符序列。其定义如下: -
另一种方法就是使用RegExp构造器
RegExp构造器接受一个字符串,并把它编译为一个RegExp对象。用法如下:
RegExp构造器适用于正则表达式必须在运行时动态生成的情况。第二个参数用来指定标志。
正则表达式的组成
构成正则表达式的元素有以下几类:
- 正则表达式选择
![]()
它尝试按顺序依次匹配这些序列项,如果这些序列中的任何一项符合匹配条件,那么这个选择就被匹配。
- 正则表达式序列

-
正则表达式因子

-
正则表达式转义

-
正则表达式分组
共有四种分组,如下所示:

捕获型分组:任何匹配这个分组的字符将会被捕获,每个捕获型分组都会被保存到结果组中并被指定一个数字(第一个捕获的分组是分组1,依次编号)。
非捕获性分组:非捕获型分组仅做匹配,而不捕获所匹配的文本,非捕获型分组不会被保存到结果组中,所以不会影响捕获型分组的编号。
向前正向匹配:类似于非捕获型分组,但自身并不匹配任何字符,只是对相应的元素进行修饰(限制),只有这个分组匹配成功后,才开始正式的匹配。
向后正向匹配:类似于向前正向匹配,但只有在他匹配失败的情况下才进行匹配。
-
正则表达式类

-
正则表达式类转义

字符类内部的转义规则和正则表达式因子的稍有不同,[\b]是退格符,下面的字符在字符类中需要转义:
- / [ \ ] ^
-
正则表达式量词

如果量词后面没有问号,则进行贪婪性匹配,即匹配尽可能多的重复直到到达上限;如果量词后面有问号,则进行懒惰性匹配,即试图匹配尽可能少的重复。一般情况下最好坚持使用懒惰性匹配。

它尝试按顺序依次匹配这些序列项,如果这些序列中的任何一项符合匹配条件,那么这个选择就被匹配。

正则表达式因子
正则表达式转义
正则表达式分组
共有四种分组,如下所示:

捕获型分组:任何匹配这个分组的字符将会被捕获,每个捕获型分组都会被保存到结果组中并被指定一个数字(第一个捕获的分组是分组1,依次编号)。
非捕获性分组:非捕获型分组仅做匹配,而不捕获所匹配的文本,非捕获型分组不会被保存到结果组中,所以不会影响捕获型分组的编号。
向前正向匹配:类似于非捕获型分组,但自身并不匹配任何字符,只是对相应的元素进行修饰(限制),只有这个分组匹配成功后,才开始正式的匹配。
向后正向匹配:类似于向前正向匹配,但只有在他匹配失败的情况下才进行匹配。
正则表达式类

正则表达式类转义

字符类内部的转义规则和正则表达式因子的稍有不同,[\b]是退格符,下面的字符在字符类中需要转义:
- / [ \ ] ^
正则表达式量词

如果量词后面没有问号,则进行贪婪性匹配,即匹配尽可能多的重复直到到达上限;如果量词后面有问号,则进行懒惰性匹配,即试图匹配尽可能少的重复。一般情况下最好坚持使用懒惰性匹配。