-
Notifications
You must be signed in to change notification settings - Fork 0
第五章:RegExp
Dn9x edited this page Aug 27, 2013
·
1 revision
JavaScript中通过RegExp
类型来支持正则表达式.使用下面的语法:
var expression = / pattern / flags;
其中的模式pattern
部分可以是任何形式的正则表达式, 每个正则表达式都可以带一个或多个标志(flags), 用以标明正则表达式的行为.共有三个标志:
- g:表示全局模式, 即模式将被应用到所有字符串。
- i:表示不区分大小写。
- m:表示多行模式
var pattren1 = /at/g; //匹配所有字符串中含有“at"的实例
var pattren2 = /[bc]at/i; //匹配第一个”bat“或“cat”不区分大小写
var pattren3 = /.at/gi; //匹配所有以“at"结尾的三个字符组合,不区分大小写
上面是定义正则表达式的一种方式,通过字面量定义。当然还有另外一种方式定义正则表达式,使用RegExp构造函数:
var p2 = /at/gi;
var p3 = new RegExp("at", "gi");
上面这两种的效果是一样的,使用RegExp构造函数的时候要传入的必须是字符串。
###5.4.1 RegExp实例属性 RegExp的每个实例都具有下列属性,通过这些属性可以获取有关模式的各种信息。
- global:布尔值,表示是否设置了
g
标志
- ignoreCase:布尔值,表示是否设置了
i
标志
- lastIndex:整数,表示开始搜索下一个匹配项的字符位置,从0算起
- multiline:布尔值,表示是否设置了
m
标志
- source:正则表达式的字符串表示
var p = /\[bc\]at/i;
alert(p.global); //false
alert(p.ignoreCase); //true
alert(p.multiline); //false
alert(p.lastIndex); //0
alert(p.source); //"\[bc\]at"
###5.4.2 RegExp实例方法
####1. exec()
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);
console.log(matches);
//["mom and dad and baby", " and dad and baby", " and baby", index: 0, input: "mom and dad and baby"]
可见结果如上。
####2. test()
test()
方法接收一个字符串参数,如果匹配就返回true, 否则返回false;
var p = /\[bc\]at/i;
alert(p.test("bcats")); //false
####5.4.3 RegExp构造函数属性 RegExp构造函数包含一些属性,而且作用域作用域中的所有正则表达式,可以通过一个长属性名称或短属性名访问(Opera不支持短属性名),
------------------------------------------------------------------------------------------
长属性名 短属性名 说明
------------------------------------------------------------------------------------------
input $_ 最近一次要匹配的字符串
------------------------------------------------------------------------------------------
lastMatch $& 最近一次的匹配项
------------------------------------------------------------------------------------------
lastParen $+ 最近一次匹配的捕获组
------------------------------------------------------------------------------------------
leftContext $` input字符串中lastMatch之前的文本
------------------------------------------------------------------------------------------
multiline $* 布尔值,表示是否所有表达式都是用多行模式,
------------------------------------------------------------------------------------------
rightContext $' input字符串中lastMatch之后的文本
------------------------------------------------------------------------------------------
虽然这些属性好用,但是要注意很多浏览器的支持情况。下面有个有关使用的例子:
var text = "this has been a short summer";
var p = /(.)hort/g;
if(p.test(text)){
alert(RegExp.input); //this has been a short summer
alert(RegExp.leftContext); //this has been a
alert(RegExp.rightContext); //summer
alert(RegExp.lastMatch); //short
alert(RegExp.lastParen); //s
alert(RegExp.multiline); //false
}