RegExp構(gòu)造函數(shù)包含一些屬性(這些屬性在其他語言中被看成是靜態(tài)屬性)。這些屬性適用于作用域中的所有正則表達式,并且基于所執(zhí)行的最近一次正則表達式操作而變化。關(guān)于這些屬性的另一個獨特之處,就是可以通過兩種方式訪問它們。換句話說,這些屬性分別有一個長屬性名和一個短屬性名(Opera是例外,它不支持短屬性名)。下表列出了RegExp構(gòu)造函數(shù)的屬性。
使用這些屬性可以從exec()或test()執(zhí)行的操作中提取出更具體的信息。請看下面的例子:
var text="this has been a short summer";
var pattern=/(.)hort/g;
/*
*注意:Opera不支持input、lastMatch、lastParen和multiline屬性
*Internet Explorer不支持multiline屬性
*/
if (pattern.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
}
以上代碼創(chuàng)建了一個模式,匹配任何一個字符后跟hort,而且把第一個字符放在了一個捕獲組中。RegExp構(gòu)造函數(shù)的各個屬性返回了下列值:
◎input屬性返回了原始字符串;
leftContext屬性返回了單詞short之前的字符串,而rightContext屬性則返回了short之后的字符串;
lastMatch屬性返回最近一次與整個正則表達式匹配的字符串,即short;
lastParen屬性返回最近一次匹配的捕獲組,即例子中的s。
如前所述,例子使用的長屬性名都可以用相應(yīng)的短屬性名來代替。只不過,由于這些短屬性名大都不是有效的ECMAScript標識符,因此必須通過方括號語法來訪問它們,如下所示:
var text='fthis has been a short summer":
var pattern=,(.)hort/g;
/*
南昌建網(wǎng)站公司前端開發(fā)工程師提醒廣大站長應(yīng)該注意:Opera不支持input、lastMatch、lastParen和multiline屬性
*Internet Explorer不支持multiline屬性
*/
if (pattern. test(text)){
alert(RegExp.$_); //this has been a short summer
alert(RegExp[$ "); //this has been a
alert(RegExp["$'"); //summer
alert(RegExp["$&"); //short alert(RegExp["$+"]); //s
alert(RegExp["$*"])}; //false
}
除了上面介紹的幾個屬性之外,還有多達9個用于存儲捕獲組的構(gòu)造函數(shù)屬性。訪問這些屬性偽語法是RegExp.$1、RegExp. $2 "'RegExp. $9,分別用于存儲第一、第二……第九個匹配的捕獲組.在調(diào)用exec()或test()方法時,這些屬性會被自動填充。然后,我們就可以像下面這樣來使用它們:
var text="this has been a short summer";
var pattern=/(..)or(.)/g;
if (pattern.test (text)){
alert (RegExp,$l); //sh
alert (RegExp.$2); //t
}
這里創(chuàng)建了一個包含兩個捕獲組的模式,并用該模式測試了一個字符串。即使test()方法只返回一個布爾值,但RegExp構(gòu)造函數(shù)的屬性$1和$2也會被匹配相應(yīng)捕獲組的字符串自動填充。
希望本文對廣大站長或從事企業(yè)網(wǎng)站建設(shè)公司的團隊有所幫助,如對此不太理解的,可以與南昌網(wǎng)絡(luò)公司百恒網(wǎng)絡(luò)技術(shù)部聯(lián)系。我們很高興與廣大站長和從事企業(yè)網(wǎng)站建設(shè)公司技術(shù)人員分享我們的技術(shù)和經(jīng)驗。