ECMAScript通过RegExp类型来支持正则表达式。形式如下:
var expression = / pattern / flags ;
patten:可以是任何简单或复杂的正则表达式,可以包含字符类、限定符、分组、向前查找以及反向应用;
flags:每个正则表达式都可带有一个或多个flags;
三个flags:
- g:表示全局模式,即模式将应用于所有字符串,而不是在找到第一个匹配项时就立即停止。
- i:表示不区分大小写,即在确定匹配模式项时忽略模式与字符串的大小写。
- m:表示多行模式,即在一行文本末尾还会继续查找下一行是否有匹配的字符。
例子:
/*匹配字符中所有ed的实例*/
var pattern1 = /ed/g;
/*匹配第一个“bed”或“red”,不区分大小写*/
var pattern2 = /[br]ed/i;
/*匹配所有以“ed”结尾的3个字符的组合,不区分大小写*/
var pattern3 = /.at/gi;
与其他语言中的正则表达式类似,模式中使用的所有元字符都必须转义。
元字符有:( [ { \ ^ $ } | ? * + ] . )
如果想要匹配以上字符,需要进行转义。
另一种创建正则表达式的方法: 使用RegExp构造函数。
它接收两个参数:1、要匹配的字符串数组;2、可选的标志字符串
可以使用字面量定义的任何表达式,都可以用构造函数来定义。
例:
/*匹配第一个“bed”或“red”,不区分大小写*/
var pattern1 = /[br]ed/i;
/*与pattern1相同,只不过是使用构造函数创建*/
var pattern2 = new RegExp("[br]ed","i");
var re = null,
i;
for(i = 0; i < 10; i++){
re = /cat/g;
re.test("catastrophe");
}
for(i = 0; i < 10; i++){
re = new RegExp("cat", "g");
re.test("catastrophe");
}
在第一个循环中,实际上只为/cat/创建了一个RegExp实例。因为实例属性不会重置。
第二个循环每次都创建一个新的RegExp实例。每次调用test()都返回true。
RegExp实例属性
global:布尔值,表示是否设置了g标志
ignoreCase:布尔值,表示是否设置了i标志
lastIndex:整数,表示开始搜索下一个匹配项的字符位置,从0算起。
multitle:布尔值,表示是否设置了m标志
source:正则表达式的字符串表示,按照字面量形式而非传入构造函数的字符串模式返回。保存的是规范形式的字符串,即字面量形式所用的字符串。
RegExp实例方法
待完善。。。