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

文章分類

文章標籤