1,介绍
ECMAScript 通过RegExp类型来支持正则表达式。
2,创建
- 字面量创建
使用下面类似Perl的语法,创建一个正则表达式,一个正则表达式就是一个模式和3个标志的组合体。例:
var expression = / pattern / flags ;
- 标志(flags)
每个正则表达式都可带有一个或多个标志(flags),用以标明正则表达式的行为。
- g:表示全局(global)模式,级模式将被应用于所有字符串,而非在发现第一个匹配项时立即停止;
- i:表示不区分大小写(case-insensitive)模式,即在确定匹配项时忽略模式与字符串的大小写。
- m:表示多行(multiline)模式,即在到达一行文本末尾时还会继续查找下一行中是否存在与模式匹配的项。
- 模式(pattern)
可以是任何简单或复杂的正则表达式,可以包含字符类、限定符、分组、向前查找以及反向引用。 - 模式中可引用的元字符包括:
( [ { \ ^ $ | ) ? * + .]}
- 如果想要匹配字符串中包含的这些字符,就必须对它们进行转义。
- 标志(flags)
使用RegExp构造函数
接收两个字符串参数:一个要匹配的字符串模式,另一个是可选的标志字符串。例:var pattern1 = /[bc]at/i; var pattern2 = new RegExp(“[bc]at”,”i”); // pattern1和pattern2是完全等价的正则表达式。
- 转义问题
由于RegExp欧早函数的模式参数是字符串,所以在某些情况下要对字符进行双重转义。所有元字符都必须双重转义,那些转义过的字符也是如此。下表示例:
| 字面量模式 | 等价的字符串 |
|:——:|:———-:|
| /[bc\]at/ | “\\[bc\\]at” |
|/\.at/ | “\\.at” |
| name\/age/ | “name\\/age”|
| \d.\d{1,2} | \\d.\\d{1,2}|
| \w\\hello\\123 | “\\w\\\\hello\\\\123” | - 版本的不同之处
- ECMAScript 3中,正则表达式字面量始终会共享一个RegExp实例,而使用构造函数创建的每一个新RegExp实例都是一个新实例。
- 在ECMAScript 5中明确规定,使用正则表达式字面量必须像直接调用RegExp函数一样,每次创建新的RegExp实例。
- 转义问题
3,RegExp实例属性
RegExp的每个实例都具有下列属性,通过这些属性可以取得有关模式的各种信息
- global:布尔值,表示是否设置了g标志。
- ignoreCase:布尔值,表示是否设置了i标志。
- lastIndex:整数,表示开始搜索下一个匹配项的字符位置,从0算起。
- multiline:布尔值,表示是否设置了m标志。
- source:正则表达式的字符串表示,按照字面量形式(规范形式)而非传入构造函数中的字符串模式返回。
4,RegExp实例方法
- exec()方法
该方法专门为捕获组而设计的。
- 参数
接受一个参数,即:要模式匹配的目标字符串。 - 返回值
返回包含第一个匹配项信息的数组;或者在没有匹配项的情况下返回null。返回的虽然是Array实例,但是包含两个额外的属性:index和input
- index
表示匹配项在字符串中的位置 - input
表示应用正则表达式的字符串 - Array实例
第一项是与整个模式匹配的字符串。其他项是与模式中的捕获组匹配的字符串(若模式中没有捕获组,则该数组只包含一项)
- index
- 参数
- test()方法
在只想知道目标字符串与某个模式是否匹配,但不需要知道其文本内容的情况下,使用这个方法非常方便。
- 参数
接受一个字符串参数 - 返回值
与参数匹配成功的情况下返回TRUE;否则返回FALSE。
- 参数
5,RegExp继承的方法
- toLocaleString()和toString()方法都会返回正则表达式的字面量。
- valueOf()方法返回正则表达式本身。
6,RegExp构造函数属性
- 这些属性在其他语言中被看成是静态属性。
- 这些属性基于所执行的最近一次正则表达式的操作而变化。
- 这些属性分别有一个长属性名和一个段属性名。
- 个属性描述,参见《JavaScript高级程序设计》p108所示表。
7,模式的局限性
- 缺少某些语言(特别是Perl)所支持的高级正则表达式特性。
- ECMAScript正则表达式不支持的特性见《JavaScript高级程序设计》p109所示。