理順 JavaScript (19) – Regex對象 RegExp

來源:互聯網
上載者:User
建立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 可以.}

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.