正規表示式 RegExp 型別擁有多個範例屬性(也叫成員屬性)和靜態屬性,通過它們能夠了解正規表示式的一些情況。
RegExp 範例屬性
每個正規表示式物件都包含一組屬性,說明如表所示。
RegExp 物件屬性
屬性 |
說明 |
global |
返回 Boolean 值,檢測 RegExp 物件是否具有標誌 g |
ignoreCase |
返回 Boolean 值,檢測 RegExp 物件是否具有標誌 i |
multiline |
返回 Boolean 值,檢測 RegExp 物件是否具有標誌 m |
lastIndex |
一個整數,返回或者設定執行下一次匹配的下標位置 |
source |
返回正規表示式的字元模式原始碼 |
global、ignoreCase、multiline 和 source 屬性都是唯讀屬性。lastIndex 屬性可讀可寫,通過設定該屬性,可以定義匹配的起始位置。
範例
下面範例演示了如何讀取正規表示式物件的基本資訊,以及 lastIndex 屬性在執行匹配前後的變化。
var s = "JavaScript"; //測試字串
var r = /w/g; //匹配模式
console.log("r.global = " + r.global); //true
console.log("r.ignoreCase = " + r.ignoreCase); //返回true
console.log("r.multiline = " + r.multiline); //返回false
console.log("r.source= " + r.source); //返回a
console.log("r.lastIndex = " + r.lastIndex); //返回0
r.exec(s); //執行匹配操作
console.log("r.lastIndex = " + r.lastIndex); //返回1
RegExp 靜態屬性
RegExp 型別包含一組靜態屬性,通過 RegExp 物件直接存取。這組屬性記錄了當前指令碼中最新正規表示式匹配的詳細資訊,說明如表所示。
這些靜態屬性大部分有兩個名字:長名(全稱)和短名(簡稱,以 $ 開頭表示)。
RegExp 靜態屬性
長名 |
短名 |
說明 |
input |
$_ |
返回當前所作用的字串,初始值為空字串"" |
index |
|
當前模式匹配的開始位置,從 0 開始計數。初始值為 -1,每次成功匹配時,index 屬性值都會隨之改變 |
lastIndex |
|
當前模式匹配的最後一個字元的下一個字元位置,從 0 開始計數,常被作為繼續匹配的起始位置。初始值為 -1,表示從起始位置開始搜尋,每次成功匹配時,lastIndex 屬性值都會隨之改變 |
lastMatch |
$& |
最後模式匹配的字串,初始值為空字串""。在每次成功匹配時,lastMatch 屬性值都會隨之改變 |
lastParen |
$+ |
最後子模式匹配的字串,如果匹配模式中包含有子模式(包含小括號的子表示式),在最後模式匹配中,最後一個子模式所匹配到的子字串。初始值為空字串""。在每次成功匹配時,lastParen屬性值都會隨之改變 |
leftContext |
$` |
在當前所作用的字串中,最後模式匹配的字串左邊的所有內容。初始值為空字串""。每次匹配成功時,其屬性值都會隨之改變 |
rightContext |
$' |
在當前所作用的字串中,最後模式匹配的字串右邊的所有內容。初始值為空字串""。每次匹配成功時,其屬性值都會隨之改變 |
$1~$9 |
$1~$9 |
唯讀屬性,如果匹配模式中有小括號包含的子字串,$1~$9 屬性值分別是第 1 個到第 9 個子模式所匹配到的內容。如果有超過 9 個以上的子模式,$1~$9 屬性分別對應最後的 9 個子模式匹配結果。在一個匹配模式中,可以指定任意多個小括號包含的子模式,但 RegExp 靜態屬性只能儲存最後 9 個子模式匹配的結果。在 RegExp 範例物件的一些方法所返回的結果陣列中,可以獲得所有圓括號內的子匹配結果 |
範例1
下面範例演示了 RegExp 型別靜態屬性使用,匹配字串“JavaScript”。
var s = "JavaScript, not JavaScript";
var r = /(Java)Script/gi;
var a = r.exec(s); //執行匹配操作
console.log(RegExp.input); //返回字串“JavaScript, not JavaScript”
console.log(RegExp.leftContext); //返回空字串,左側沒有內容
console.log(RegExp.rightContext); //返回字串“,not JavaScript”
console.log(RegExp.lastMatch); //返回字串“JavaScript”
console.log(RegExp.lastParen); //返回字串“Java”
執行匹配操作後,各個屬性的返回值說明如下:
-
input 屬性記錄操作的字串:“JavaScript, not JavaScript”。
-
leftContext 屬性記錄匹配文字左側的字串在第一次匹配操作時,左側文字為空。而 rightContext 屬性記錄匹配文字右側的文字,即為“,not JavaScript”。
-
lastMatch 屬性記錄匹配的字串,即為“JavaScript”。
-
lastParen 屬性記錄匹配的分組字串,即為“Java”。
如果匹配模式中包含多個子模式,則最後一個子模式所匹配的字元就是“RegExp.lastParen”。
var r = /(Java)(Script)/gi;
var a = r.exec(s); //執行匹配操作
console.log(RegExp.lastParen); //返回字串“Script”,而不再是“Java”。
範例2
針對上面範例也可以使用短名來讀取相關資訊。
var s = "JavaScript, not JavaScript";
var r = /(Java)(Script)/gi;
var a = r.exec(s);
console.log(RegExp.$_); //返回字串“JavaScript, not JavaScript”
console.log(RegExp["$`"]); //返回空字串
console.log(RegExp["$'"]); //返回字串“,not JavaScript”
console.log(RegExp["$&"]); //返回字串“JavaScript”
console.log(RegExp["$+"]); //返回字串“Script”
這些屬性的值都是動態的,在每次執行匹配操作時,都會被重新設定。