Core Object – 正規表達式物件(RegExp Object)
正規表達式物件(RegExp Object)
| RegExp 物件 | 兼容性:IE4+、NN4+、Moz1+、Safari1+ |
| 屬性 | constructor、global、ignoreCase、lastIndex、multilane、source、$1~$9、 lastMatch、leftContext、rightContext |
| 方法 | exec、test |
regObj = new RegExp(pattern, attributes) regObj:正規表達式物件的名稱 pattern:字串樣式 regObj = /pattern/attributes attributes:欲比對的方式 g = 完全比對、i = 忽略大小寫、m = 多列。 比對無法成功時傳回 null。
用來存放正規表達式的物件。
//範例
var myReg = new RegExp("ABc", "ig"); //以 ABc 樣式字串來比對並且忽略大小寫與完全比對
var myStr = "abcdef ABCDEF"; //欲比對的目標字串
var myData = myStr.match(myReg); //使用字串物件的 match() 來比對
document.write("字串 ABc 比對" + myStr + "的結果為:" + myData);
//結果為 字串 ABc 比對abcdef ABCDEF的結果為:abc,ABC
| $1 ~ $9 屬性 | 兼容性:IE4+、NN4+、Moz1+、Safari1+ |
RegExp.$1~$9
$1 ~ $9:$1 是第一個字串 $2 是第二個字串…以此類推
$1~$9 屬性是用來存放與樣式比對成功的字串。
//範例
//樣式為 "任意的英數字元 + 空白字元 + 任意的英數字元 + 空白字元 + 任意的英數字元" 且為完全比對
//並且使用括號來保存所匹配的英數字元
var myReg = new RegExp("(\\w+)\\s(\\w+)\\s(\\w+)","g");
var myStr = "abc ABC 123"; //欲比對的目標
var myData = myStr.replace(myReg,"$3, $1 and $2"); //使用字串物件的 replace() 來置換
document.write("myData 內容: " + myData); //myData 內容: 123, abc and ABC
document.write("$1 內容結果: " + RegExp.$1); //$1 內容結果: abc
document.write("$2 內容結果: " + RegExp.$2); //$2 內容結果: ABC
document.write("$3 內容結果: " + RegExp.$3); //$3 內容結果: 123
| exec test 方法 lastIndex 屬性 | 兼容性:IE4+、NN4+、Moz1+、Safari1+ |
regObj.exec(string) regObj:正規表達式物件的名稱 regObj.lastIndex = start string:欲搜尋的字串 regObj.test(string) start:開始位置
exec 是用來開始比對。
test 是用來檢查有無匹配成功。
lastIndex 是用來指定下次比對的起始位置,如果沒有使用 g 來完全比對或者不代表是全域樣式的 RegExp 物件,將不能使用這個屬性。
//範例
myReg = /..ABC/g; //樣式為 "任何字元 + 任何字元 + ABC"
myReg.lastIndex = 5; //從目標的第 6 個字元開始比對
myFlag = myReg.test("11ABC22ABC33ABCXXABC"); //檢查有無匹配樣式的字串
myData = myReg.exec("11ABC22ABC33ABCXXABC"); //開始比對目標字串
document.write("test 的結果: " + myFlag); //結果為 true
document.write("exec 的結果: " + myData); //結果為 33ABC
| global ignoreCase 屬性 | 兼容性:IE5.5+、NN4+、Moz1+、Safari1+ |
| multiline 屬性 | 兼容性:IE5.5+、NN6+、Moz1+、Safari1+ |
regObj.global 傳回是否為完全比對的值(true或false) - g regObj.ignoreCase 傳回是否為忽略大小寫的值(true或false) - i RegExp.multiline 指定是否要多列比對的值(true或false) - m
用來傳回或指定搜尋條件的 true 或 false 值。
//範例 var myReg1 = /ABC/; var myReg2 = /ABC/g; var myReg3 = /ABC/; var myReg4 = /ABC/i; document.write(myReg1.global); //結果為 false document.write(myReg2.global); //結果為 true document.write(myReg3.ignoreCase); //結果為 false document.write(myReg4.ignoreCase); //結果為 true
| lastMatch 屬性 | 兼容性:IE5.5+、NN4+、Moz1+、Safari1+ |
RegExp.lastMatch 傳回最後匹配成功的字串
用來傳回最後比對成功的字串。
//範例
myReg = /ABC../g;
myStr = "ABC12ABC34ABC56ABC789";
myData = myStr.match(myReg);
document.write("全部比對成功的字串: " + myData);
//結果為 ABC12,ABC34,ABC56,ABC78
document.write("最後比對成功的字串: " + RegExp.lastMatch);
//結果為 ABC78
| leftContext rightContext 屬性 | 兼容性:IE5.5+、NN4+、Moz1+、Safari1+ |
RegExp.leftContext 傳回匹配成功字串的左邊字串 RegExp.rightContext 傳回匹配成功字串的右邊字串
用來傳回所匹配字串的左右邊字串。
//範例
myReg = new RegExp("(i am)");
myStr = "hi~i am skyfate.";
myData = myStr.match(myReg);
document.write("比對的字串: " + myStr); //結果為 hi~i am skyfate.
document.write("比對的結果: " + myData); //結果為 i am,i am
document.write("左方的字串: " + RegExp.leftContext); //結果為 hi~
document.write("右方的字串: " + RegExp.rightContext); //結果為 skyfate.
| source 屬性 | 兼容性:IE4+、NN4+、Moz1+、Safari1+ |
regObj.source
用來傳回樣式的字串。
//範例
var myReg = new RegExp("The Time of my Life", "ig");
document.write("正規表達式物件的樣式字串:" + myReg.source);
//正規表達式物件的樣式字串:The Time of my Life