一、RegExp类型
1.创建正则表达式
方式1:字面量形式
var expression = / pattern / flags ;
参数:
- 模式(pattern)部分可以是任何简单或复杂的正则表达式,可以包含字符类、限定符、分组、 向前查找以及反向引用。
模式中元字符必须转义。
正则表达式中的元字符包括: ( [ { \ ^ $ | ) ? * + . ] } - 每个正则表达式都可带有一或多个标志(flags),用以标明正则表达式的行为。
g: 表示全局(global)模式
i: 表示不区分大小写(case-insensitive)模式
m: 表示多行(multiline)模式
方式2:构造函数
var pattern = new RegExp("[bc]at", "i");
参数: 要匹配的字符串模式,可选的标志字符串。
注意:两个参数都是字符串(不能传正则表达式字面量)。某些情况下要对字符串模式进行双重转义。
注意:
ECMAScript 3 中, 正则表达式字面量始终会共享同一个RegExp实例,而使用构造函数创建的每一个新RegExp实例都是一个新实例。
ECMAScript 5 明确规定,使用正则表达式字面量必须像直接调用 RegExp 构造函数一样,每次都创建新的 RegExp 实例。IE9+、Firefox 4+和 Chrome 都据此做出了修改。
2.RegExp实例属性
global: 布尔值,表示是否设置了 g 标志。
ignoreCase: 布尔值,表示是否设置了 i 标志。
lastIndex: 整数,表示开始搜索下一个匹配项的字符位置,从 0 算起。
multiline: 布尔值,表示是否设置了 m 标志。
source: 正则表达式的字符串表示,按照字面量形式而非传入构造函数中的字符串模式返回。
没有多大用处,因为这些信息全都包含在模式声明中。
3.RegExp实例方法
(1)正则.exec(字符串参数)
专门用于捕获组。用()表示捕获组。
返回包含第一个匹配项信息的数组;没有匹配项返回 null。
返回数组包含两个额外的属性: index 和 input。index 表示匹配项在字符串中的位置,input 表示应用正则表达式的字符串。
在数组中,第一项是与整个模式匹配的字符串(第一个匹配项),其他项是与模式中的捕获组匹配的字符串(如果模式中没有捕获组,则该数组只包含一项)。
即使在模式中设置了全局标志(g),每次也只会返回一个匹配项。
不设置全局标志的情况下,在同一个字符串上多次调用 exec() 将始终返回第一个匹配项的信息。
设置全局标志的情况下,每次调用 exec() 则都会在字符串中继续查找新匹配项。
var text = "cat, bat, sat, fat";
var pattern1 = /.at/;
var matches = pattern1.exec(text);
alert(matches.index); //0
alert(matches[0]); //cat
alert(pattern1.lastIndex); //0
matches = pattern1.exec(text);
alert(matches.index); //0
alert(matches[0]); //cat
alert(pattern1.lastIndex); //0
var pattern2 = /.at/g;
var matches = pattern2.exec(text);
alert(matches.index); //0
alert(matches[0]); //cat
alert(pattern2.lastIndex); //3
matches = pattern2.exec(text);
alert(matches.index); //5
alert(matches[0]); //bat
alert(pattern2.lastIndex); //8
(2)正则.test(字符串参数)
检测目标字符串与某个模式是否匹配。
匹配返回 true; 不匹配返回 false。
(3)toLocaleString() toString() valueOf()
RegExp 实例继承的 toLocaleString()和 toString()方法都会返回正则表达式的字面量,与创建正则表达式的方式无关。
正则表达式的 valueOf()方法返回正则表达式本身。
4.RegExp构造函数属性
RegExp 构造函数包含一些属性:
input $_ 最近一次要匹配的字符串。Opera不支持
lastMatch $& 最近一次的匹配项。Opera不支持
lastParen $+ 最近一次匹配的捕获组。Opera不支持
leftContext $` input字符串中lastMatch之前的文本
multiline $* 布尔值,表示是否所有表达式都使用多行模式。IE和Opera不支持
rightContext $’ Input字符串中lastMatch之后的文本
长属性名和短属性名
9 个用于存储捕获组的构造函数属性:
RegExp.$1、RegExp.$2…RegExp.$9,分别用于存储第一、第二…第九个匹配的捕获组。
在 调用 exec() 或 test() 方法时,这些属性会被自动填充。
5.模式的局限性
略
上一篇:9-JavaScript高级程序设计-Date
下一篇:11-JavaScript高级程序设计-Function