一.建立正則表達的方式 1.字面量或稱爲直接量(不須要用任何的關鍵字說明它是正則表達式,而是用斜槓來表示正則表達式的開始和結束) eg: var reg = /^\w/; 2.對象 eg: var reg = new RegExp("^\w"); attentions: 1)由於簡潔方便,字面量建立的方式用的居多。 2)ES5規定正則表達式直接量的每次運算都返回新對象。 2、 正則對象的屬性和方法 1.屬性(5個) ignoreCase:返回一個布爾值,表示是否設置了i修飾符,該屬性只讀。 global:返回一個布爾值,表示是否設置了g修飾符,該屬性只讀。 multiline:返回一個布爾值,表示是否設置了m修飾符,該屬性只讀。 lastIndex:返回下一次開始搜索的位置。該屬性可讀寫,可是隻在設置了g修飾符時有意義。 source:返回正則表達式的字符串形式(不包括斜槓),該屬性只讀。 eg: var reg = /Hello/ig; console.log(reg.ignoreCase); //true console.log(reg.global); //true console.log(reg.multiline); //false console.log(reg.lastIndex); //0 console.log(reg.source); //Hello 2.方法(3個) test(): 檢索字符串中的指定值。返回值是 true 或 false。 exec(): 若是發現匹配,就返回一個數組,成員是每個匹配成功的子字符串,不然返回null。 compile(): 用於改變 RegExp eg: 1) var reg1 = /Hello/ig; console.log(reg1.test("Hello World!"));//true console.log(reg1.lastIndex); //5 console.log(reg1.test("HELLO World!")); //false //attention: 當正則表達式有g修飾時,每一次運算都會自動更新lastIndex,下次運算就重新的起點(lastIndex的值)開始尋求匹配,而不是把字符串按從左到右去檢索。 reg1.lastIndex = 0; console.log(reg1.test("HELLO World!")); //true 2) var reg1 = /Hello/ig; var result = reg1.exec("Hello abc hello def"); console.log(result); //["Hello"] console.log(result.input); //Hello abc hello def console.log(result.index); //0 onsole.log(reg1.exec("Hello abc hello def")); //["hello"] console.log("Hello abc hello def".match(reg1)); // ["Hello", "hello"] attention: exec方法的返回數組還包含如下兩個屬性: input:整個原字符串。 index:整個模式匹配成功的開始位置(從0開始計數)。 3) var patt1=new RegExp("e"); console.log(patt1.test("The best things in life are free")); //true patt1.compile("d"); console.log(patt1.test("The best things in life are free")); //false 3、語法 1.修飾符及其描述 i 執行對大小寫不敏感的匹配。 g 執行全局匹配(查找全部匹配而非在找到第一個匹配後中止)。 m 執行多行匹配。 2.元字符(Metacharacter)是擁有特殊含義的字符: . 查找單個字符,匹配除回車(\r)、換行(\n) 、行分隔符(\u2028)和段分隔符(\u2029)之外的全部字符。 \cX 表示Ctrl-[X],其中的X是A-Z之中任一個英文字母,用來匹配控制字符。 [\b] 匹配退格鍵(U+0008),不要與\b混淆。 \n 匹配換行鍵。 \r 匹配回車鍵。 \t 匹配製表符tab(U+0009)。 \v 匹配垂直製表符(U+000B)。 \f 匹配換頁符(U+000C)。 \0 匹配null字符(U+0000)。 \xhh 匹配一個以兩位十六進制數(\x00-\xFF)表示的字符。 \uhhhh 匹配一個以四位十六進制數(\u0000-\uFFFF)表示的unicode字符。 \d 匹配0-9之間的任一數字,至關於[0-9]。 \D 匹配全部0-9之外的字符,至關於[^0-9]。 \w 匹配任意的字母、數字和下劃線,至關於[A-Za-z0-9_]。 \W 除全部字母、數字和下劃線之外的字符,至關於[^A-Za-z0-9_]。 \s 匹配空格(包括製表符、空格符、斷行符等),相等於[\t\r\n\v\f]。 \S 匹配非空格的字符,至關於[^\t\r\n\v\f]。 \b 匹配詞的邊界。 \B 匹配非詞邊界,即在詞的內部。 3.位置字符 ^ 表示字符串的開始位置 $ 表示字符串的結束位置 attentions: 1)當正則表達式用m(即multiline)修飾時,則^能夠匹配每一行的行首,$能夠匹配每一行的行末 2)^用於中括號表示取非,簡單地說,就是排除中括號中的全部元素。 4.選擇字符 豎線符號()在正則表達式中表示「或關係」(OR) 方括號([])全部可供選擇的字符都放在方括號內,好比[xyz] 表示x、y、z之中任選一個匹配。 連字符(-)表示字符的連續範圍 eg: "a".match("ab"); //["a"] "b".match("ab"); //["b"] "ab".match("ab"); //["a"] 5.轉義符 正則模式中,須要用斜槓轉義的,一共有12個字符:^、.、[、$、(、)、、*、+、?、{和\\。須要特別注意的是,若是使用RegExp方法生成正則對象,轉義須要使用兩個斜槓,由於字符串內部會先轉義一次。若是是字面量生成,兩次轉義反而會弄巧成拙。 eg: (new RegExp('1\+1')).test('1+1')// false (new RegExp('1\\+1')).test('1+1')// true /1\\+1/.test('1+1') //false /1\+1/.test('1+1') //true 6.重複類 ? 軟性量詞 出現零次或一次 * 軟性量詞 出現零次或屢次(任意次) + 軟性量詞 出現一次或屢次(至少一次) {n} 硬性量詞 對應零次或者n次 {n,m} 軟性量詞 至少出現n次但不超過m次 {n,} 軟性量詞 至少出現n次(+的升級版)
參考連接:http://javascript.ruanyifeng....javascript