以字面量定義正則表達式
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.正則表達式註釋