天天看點

js中使用正規表達式(三)RegExp對象構造函數屬性介紹

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

    }
           

繼續閱讀