RegExp 隨筆

 

 以字面量定義正則表達式
 var expression = /pattern/ flags;
 pattern 部分能夠是任何簡單或複雜的正則表達示
 flage 標明正則表達式的行爲 1.g:全局模式,不會在發現第一個匹配項後中止 2.i:不區分大小寫模式 3.m:多行模式
 例:正則表達式

var pattern1 = /at/g; //匹配字符串中全部at

var pattern2 = /[bc]at/i; //匹配第一個「bat」或「cat」,不區分大小寫

var pattern3 = /.at/gi; //全局匹配以「結尾」的三個字符。不區分小寫

模式中使用的全部元字符都必須轉義。正則表達式中的元字符包括:([{\^$|?*+.}])
例:express

var pattern4 = /\[bc\]at/i; //匹配第一個「[bc]at」,不區分大小寫

 

 使用RegExp構造函數,接受2個參數,參數1:要匹配的字符串模式,參數2:可選的標誌行爲
 例:數組

var pattern5 = new RegExp("[bc]at", "i");

 注:由於RegExp構造函數的模式參數都是字符串,因此在某些狀況下要對字符串進行雙重轉義。全部元字符必須雙重轉義瀏覽器

 例:
 字面量        等價字符串
 /\[bc\]at/      "\\[bc\\]at"
 /\.at/        "\\.at"
 /name/\age/     "name\\/age"
 /\d.\d{1,2}/     "\\d.\\d{1,2}"
 /\w\\hello\\123/   "\\w\\\\hello\\\\123"函數

 注:使用字面量和實例化建立正則表達式不同,字面量始終會共享同一個RegExp實例(ECMAScript3)。使用構造函數建立的每個新的RegExp實例都是一個新實例。es5

 

 RegExp實例屬性spa

console.log(pattern5.global); //false 是否設置了g標誌
console.log(pattern5.ignoreCase); //true 是否設置了i標誌
console.log(pattern5.multiline); //false 是否設置了m標誌
console.log(pattern5.lastIndex); //0 開始搜索下一個匹配項的起始位置
console.log(pattern5.source); //[bc]at 正則表達式的字符串表示

 繼承屬性code

console.log(pattern5.toString()); // /[bc]at/i 正則表達式的字面量表示
console.log(pattern5.toLocaleString()); // /[bc]at/i 正則表達式的字面量表示
console.log(pattern5.valueOf()); // /[bc]at/i 正則表達式的字面量表示

RegExp實例方法
方法一:exec(),接受一個參數,既應用模式字符串。返回返回包含第一個匹配項信息的數組,在沒有的狀況下返回null,返回的數組實例包含兩個屬性index(匹配項在字符中的位置)和input(應用正則的字符串)。blog

var text = "huang jin liang shi ge hao ren";
var pattern6 = new RegExp("huang( jin liAng( shi ge hao ren)?)?", "i");
var matches = pattern6.exec(text);
console.log(matches); 
//[ 'huang jin liang shi ge hao ren',
// ' jin liang shi ge hao ren',
// ' shi ge hao ren',
// index: 0,
// input: 'huang jin liang shi ge hao ren' ]

var text1 = "cat, bat, sat";
var pattern7 = new RegExp(".at")
var matches1 = pattern7.exec(text1);
console.log(matches1); //cat

var pattern8 = new RegExp(".at", "gm");
var matches2 = pattern8.exec(text1);
console.log(matches2); //cat
var matches3 = pattern8.exec(text1);
console.log(matches3); //bat
var matches4 = pattern8.exec(text1);
console.log(matches4); //sat
var matches5 = pattern8.exec(text1);
console.log(matches5); //null

 


 方法二:test(),接受一個參數,既應用模式字符串。該模式與該參數匹配的狀況下返回true,反之false繼承

var text2 = "000-00-0000";
var pattern9 = new RegExp("\\d{3}-\\d{2}-\\d{4}");
console.log(pattern9.test(text2))
console.log(text2);
if (pattern9.test(text2)) {
console.log("匹配成功");
} else {
console.log("匹配失敗");
}

 


 構造函數屬性(某些瀏覽器不支持)
長屬性名         短屬性名   說明
input         $_       最近一次要匹配的字符串
lastMatch      $&       最近一次匹配項
lastParen       $+      最近一次捕獲組
leftContext    $`       input字符串中lastMatch以前的文本
multiline       $*       布爾,是不是多行模式
rightContext     $'        input字符串中lastMatch以後的文本
         $1~$9    分別用於存儲第幾個捕獲組

 

 在ECMAScript侷限性 1.匹配字符串開始和結束的\A和\Z錨 2.向後查找 3.並集和交集類 4.原子組 5.Unicode支持(單個字符除外) 6.命名捕獲組 7.s和x匹配模式 8.條件匹配 9.正則表達式註釋

相關文章
相關標籤/搜索