1、RegExp构造函数属性可以通过两种方式访问:长属性名和短属性名方式,其属性有:
长属性名 短属性名 说明
input $_ 最近一次要匹配的字符串,即原字符串
lastMatch $& 最近一次的匹配项,即匹配到的字符串
lastParent $+ 最近一次的匹配捕获组,即捕获组匹配到的字符串
leftContext $` input字符串中lastMatch之前的文本
rightContext $' input字符串中lastMatch之后的文本
multiline $* 布尔值,表示所有表达式是否都使用多行匹配模式,IE和Opera未实现此属性
2、使用上述属性,可以从exec()和test()方法中提取出更多信息,例如:
//匹配模式说明:匹配任何一个字符后面跟hort,而且把第一个字符放到捕获组中
var text = "this has bean a short summer";
var regx = /(.)hort/g;
if(regx.test()){
alert(RegExp.input);//this has bean a short summer
alert(RegExp.lastMatch);//short
alert(RegExp.lastParent);//s
alert(RegExp.leftContext);//this has bean a
alert(RegExp.rightContext);// summer
alert(RegExp.multiline);//false
}
3、上述使用的是长属性名方式访问RegExp属性值,也可以通过短属性名方式访问,因短属性名大都不是有效的ECMAScript标示符,因此必须通过方括号来访问,例如:
if(regx.test()){
alert(RegExp.$_);//this has bean a short summer
alert(RegExp["$&"]);//short
alert(RegExp["$+"]);//s
alert(RegExp["$`"]);//this has bean a
alert(RegExp["$'"]);// summer
alert(RegExp["$*"]);//false
}
4、除了上述描述的属性之外,还有9个用于存储捕获组的构造函数属性,访问这些属性的语法是,RegExp.$1、RegExp.$2。。。RegExp.$9
,分别存储第一个、第二个。。。第九个捕获组字符串。调用exec()或test()方法时,这些属性会被自动填充,例如:
//匹配模式说明:匹配任何两个字符后面跟or,or后面跟任意一个字符,包含两个捕获组
var text = "this has bean a short summer";
var regx = /(..)or(.)/g;
if(regx.test()){
alert(RegExp.$1);//sh
alert(RegExp.$2);//t
}