建立Regex的方法
var p1 = new RegExp("abc", "igm");var p2 = RegExp("abc", "igm");var p3 = /abc/igm;//判斷是否是Regex對象alert(p1 instanceof RegExp); //truealert(p2 instanceof RegExp); //truealert(p3 instanceof RegExp); //true
Regex對象的 5 個屬性
var p = /abc/igm;//source: 運算式文本, 唯讀alert(p.source); //abc//ignoreCase: 是否有指定 i, 唯讀; i 表示不不區分大小寫alert(p.ignoreCase); //true//global: 是否有指定 g, 唯讀; g 表示匹配全部alert(p.global); //true//multiline: 是否有指定 m, 唯讀; m 表示多行匹配alert(p.multiline); //true//lastIndex: 最好一次的匹配位置, 是可讀寫屬性.alert(p.lastIndex); //0; 在匹配之前它肯定是 0
Regex對象的 2 個方法之 test
//這個 test 非常簡單, 它只能返回 true/false 表示是否找到匹配; 通過它瞭解不到更多資訊var str, p, b;str = '1:abc;2:Abc;3:aBc;4:abC;5:ABc;6:aBC;7:AbC;8:ABC';p = /abc/i;b = p.test(str);alert(b); //true; 表示有匹配到p = /abcdefg/i;b = p.test(str);alert(b); //false; 表示沒匹配到//對 test 來講, 是否指定 g(全域匹配) 是沒有意義的; 因為它有發現就返回.
Regex對象的 2 個方法之 exec
//exec 返回的是匹配結果, 是個數組var str, p, arr;str = '1:abc;2:Abc;3:aBc;4:abC;5:ABc;6:aBC;7:AbC;8:ABC';p = /abc/i;arr = p.exec(str);alert(arr); //abc//怎麼能知道返回的 arr 是個數組, 測試一下:alert(arr instanceof Array); //truealert(arr[0]); //abc//何必要用數組表達? 因為Regex中可能會有"子運算式", 譬如:p = /(ab)(c)/i; //子運算式是用 () 區分的, 上面運算式包含兩個子運算式; 用於 exec 函數時將返回 length = 3 的數組://arr[0]: 匹配整個運算式的結果;//arr[1]: 匹配第一個子運算式的結果;//arr[2]: 匹配第二個子運算式的結果...//包含子運算式的例子(繼續使用上面的字串 str)p = /(ab)(c)/i;arr = p.exec(str);alert(arr); //abc,ab,c//遍曆這個數組for (var i=0; i
關於 exec 的全域匹配
//首先, exec 不會像 String.match 那樣方便的完成全域匹配; 不過這恰是它的強大之處.//第一個例子沒有指定 g; 執行了三次 exec 結果都是一樣的var str, p1, arr;str = '1:abc;2:Abc;3:aBc;4:abC;5:ABc;6:aBC;7:AbC;8:ABC';p1 = /(ab)(c)/i;arr = p1.exec(str);alert(arr); //abc,ab,carr = p1.exec(str);alert(arr); //abc,ab,carr = p1.exec(str);alert(arr); //abc,ab,calert(p1.lastIndex); //5//這個例子使用了全域匹配, 結果不一樣了; var str, p2, arr;str = '1:abc;2:Abc;3:aBc;4:abC;5:ABc;6:aBC;7:AbC;8:ABC';p2 = /(ab)(c)/ig;arr = p2.exec(str);alert(arr); //abc,ab,carr = p2.exec(str);alert(arr); //Abc,Ab,carr = p2.exec(str);alert(arr); //aBc,aB,calert(p2.lastIndex); //17//可以這樣遍曆所有匹配:var str, p, arr;str = '1:abc;2:Abc;3:aBc;4:abC;5:ABc;6:aBC;7:AbC;8:ABC';p = /(ab)(c)/ig;while ((arr = p.exec(str)) != null) { alert(arr); //可在此提取子運算式的匹配結果, 這個功能只有 exec 可以.}