JavaScript中的正则表达式
RegExp类型
EMCAScript通过RegExp类型来支持正则表达式。语法类似Perl:
var expression = /pattren/flags
其中的模式pattern
部分可以是任何简单或复杂的正则表达式。每个正则表达式都可带有一个或多个标志flag
:
- g:global,全局模式,即模式将被应用于所有字符串
- i:表示不区分大小写
- m:表示(multiline)多行模式,即到达行末后会继续查找下一行是否存在与之相匹配的项
示例如下:
var pattern1 = /at/g //匹配字符串中所有"at"的示例
var pattern2 = /[bc]at/i //匹配第一个"bat"/"cat"不区分大小写
与其他语言类似,当要对.
[
]
等符号匹配时要在前方加上\
进行转义。
除此之外还可以通过构造函数来创建正则表达式:
var p = /[bc]at/i
var p = new RegExp("[bc]at","i")
//以上两个语句的作用完全相同
但需要注意的时候,在构造函数中创建正则需要进行双重转义,如用\\[bc\\]at
表示正则[bc]at
RegExp实例属性
每个RegExp的示例都具有以下属性:
- global:布尔值,表示是否设置了g标志
- ignereCase:布尔值,表示是否设置了i标志
- lastIndex:整数,便是开始搜索下一个匹配项的字符位置,从0算起
- multiline:布尔值,表示是否设置了m标志
- source:正则表达式的字符串表示
例如:
var p1 = \.ac\g
alert(p1.global) //true
alert(p1.ignoreCase) //false
alert(p1.lastIndex) //0
alert(p1.multiline) //false
alert(p1.source) //.ac
RegExp实例方法
- exec()方法:
接受要应用模式的字符串为参数,返回包含第一个匹配项信息的数组;或者在没有匹配项的情况下返回null。返回到数组是Array的实例。返回的数组包含两个额外的属性:index和input。其中,index表示匹配项在字符串中的位置,input表示应用正则表达式的字符串。在数组中,第一项是与整个模式匹配的字符串,其他项是与模式中的捕获组匹配的字符串:
var text = "mom and dad and baby";
var pattern = /mom( and dad( and baby)?)?/gi;
var matches = pattern.exec(text);
alert(matches.index); //0
alert(matches.input); //"mom and dad and baby"
alert(matches[0]); //"mom and dad and baby"
alert(matches[1]); //" and dad and baby"
alert(matches[2]); //" and baby"
- test()方法:
接受一个字符串参数。在模式与该参数匹配的情况下返回true,否则返回false :
var text = “000-00-0000”;
var pattern = /\d{3}-d{2}-d{4}/;
pattern.test(text); //true
- compile()方法:接收一个字符串参数,用来改变正则表达式的模式匹配值。
var pattern = /abc/;
pattern.test("abc"); //true
pattern.compile("def");
pattern.test("abc"); //false
pattern.test("def"); //true