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.$);//sh
alert(RegExp.$);//t
}