js正規表示式中test,exec,match方法的差異說明
test
test 傳回 Boolean,尋找對應的字串中是否存在模式。
var str = "1a1b1c";
var reg = new RegExp("1.", "");
alert(reg.test(str)); // true
exec
exec 尋找並傳回目前的符合結果,並以陣列的形式傳回。
var str = "1a1b1c";
var reg = new RegExp("1.", "");
var arr = reg.exec(str);
如果不存在模式,則arr 為null,否則arr 總是長度為1 的數組,其值就是目前符合項。 arr 還有三個屬性:index 目前符合的位置;lastIndex 目前符合項目結束的位置(index 目前符合項目的長度);input 如上範例中 input 就是 str。
exec 方法受參數 g 的影響。若指定了 g,下次呼叫 exec 時,會從上個符合的 lastIndex 開始尋找。
var str = "1a1b1c";
var reg = new RegExp("1.", "");
alert(reg.exec(str)[0]);
alert(reg .exec(str)[0]);
上述兩個輸出都是1a。現在再看看指定參數g:
var str = "1a1b1c";
var reg = new RegExp("1.", "g");
alert(reg.exec(str)[0 ]);
alert(reg.exec(str)[0]);
上述第一個輸出1a,第二個輸出1b。
match
match 是 String 物件的一個方法。
var str = "1a1b1c";
var reg = new RegExp("1.", "");
alert(str.match(reg));
match 這個方法有點像exec ,但:exec 是RegExp 物件的方法;math 是String 物件的方法。二者還有一個不同點,就是參數 g 的解釋。
如果指定了參數 g,那麼 match 一次傳回所有的結果。
var str = "1a1b1c";
var reg = new RegExp("1.", "g");
alert(str.match(reg));
//alert(str .match(reg)); // 此句同上句的結果是一樣的
此結果為一個數組,有三個元素,分別是:1a、1b、1c。
JavaScript中常用到正規表示式, 而正規表示式中常用到Match和Test這兩個函數,當然還有Exec. 這裡以程式碼實例來區分它們之間的不同吧.
Match Example
var rs;
while ((rs = regexp.exec(str)) != null)
{
document.write(rs);
(regexp.lastIndex);
document.write("
");
}
OUTPUT
---------------------------------
A 1
B 2
C 3
}
OUTPUT
---------------------------------
abb 3