正則運算式
在學習ES6的新增的正則前,我想先復習一下正則運算式,當然,現如今,我們使用正則匹配替換文本的時候,都是拿著成品直接用,但是我們如果想要深入的學習,肯定要先了解基礎的語法,含義,因此我先復習一下基礎的正則語法,再進行ES6新增的時候,就會輕松許多,有許多我也不知道的,因此就先寫個筆記,方便日后再復習!
1.基本語法
2.修飾符
3.元字符
今天只寫基本語法類的筆記,還有匹配規則,匹配優先級的問題可以自行查閱,應該一查就能查到,下面就開始了:
1.基本語法
1 1 //1.[] ([]表示匹配中括號里面的字符) 2 2 [abc] //表示匹配abc 3 3 [^abc] //表示匹配非abc的所有字母 4 4 [A-Z] //表示匹配A到Z的所有大寫字母 5 5 [\s\S] //匹配所有,\s 是匹配所有空白符,包括換行,\S 非空白符,不包括換行, 6 6 \w //匹配字母、數字、下劃線,等價于 [A-Za-z0-9_] 7 7 ? 8 8 //2.轉義字符系列 9 9 \n //匹配一個換行符, 10 10 \r //匹配一個回車符, 11 11 \s //匹配任何空白字符,包括空格、制表符、換頁符等等,等價于 [ \f\n\r\t\v], 12 12 \S //匹配任何非空白字符, 13 13 ? 14 14 //3.特殊字符 15 15 ^ //開頭 16 16 $ //結尾 17 17 ( ) //標記子運算式開始和結束的位置 18 18 . // 表示匹配除了\n外的任何單字符 19 19 | //表示兩個中的任意一個匹配 20 20 \ //使用匹配特殊字符時要用到,比如要匹配. 就用\. 21 21 22 22 //4.限定符 23 23 ? - 0 次或 1 次匹配, 24 24 * - 匹配 0 次或多次, 25 25 + - 匹配 1 次或多次, 26 26 {n} - 匹配確定的 n 次 27 27 {n,} -至少匹配n 次 28 28 {n,m} - 匹配n到m次 29 29 30 30 //5.定位符號 31 31 ^ //匹配輸入字串開始的位置,js中如果設定了 RegExp 物件的 Multiline 屬性,^ 還會與 \n 或 \r 之后的位置匹配, 32 32 $ //匹配輸入字串結尾的位置,js中設定了 RegExp 物件的 Multiline 屬性,$ 還會與 \n 或 \r 之前的位置匹配, 33 33 \b //匹配一個單詞邊界,即字與空格間的位置, 34 34 \B //非單詞邊界匹配, 35 35 ? 36 36 //6.分組()與?=、?<=、?!、?<! 37 37 //用圓括號 () 將所有選擇項括起來,相鄰的選擇項之間用 | 分隔,一般都有這兩個搭配,有快取問題用?:解決 38 38 //括號中 ?=、?<=、?!、?<! 的使用區別 39 39 /abc(?=\d)/ //匹配數字前面的abc 40 40 /(?<=\d)abc/ //匹配數字后面的abc 41 41 /abc(?!\d)/ //匹配abc需要后面不是數字 42 42 /(?<!\d)abc/ //匹配abc前面非數字
2.修飾符
1 //1.正則常用修飾符 2 g //(global)全域匹配 3 i //(ignore)不區分大小寫 4 m //(multi line)多行匹配 5 s //特殊字符圓點 . 中包含換行符 \n,加上s修飾 6 ? 7 //demo 8 var str="Google runoob "; 9 var n1=str.match(/runoob/g); // 區分大小寫 10 var n2=str.match(/runoob/gi); // 不區分大小寫
3.元字符
這個一般有個大全表,然后我直接搜了一個(非本人總結)拿過來做筆記,方便以后查看不必再搜索,直接拿來用就行了
| \ | 將下一個字符標記為一個特殊字符、或一個原義字符、或一個 向后參考、或一個八進制轉義符,例如,'n' 匹配字符 "n",'\n' 匹配一個換行符,序列 '\' 匹配 "" 而 "(" 則匹配 "(", |
|---|---|
| ^ | 匹配輸入字串的開始位置,如果設定了 RegExp 物件的 Multiline 屬性,^ 也匹配 '\n' 或 '\r' 之后的位置, |
| $ | 匹配輸入字串的結束位置,如果設定了RegExp 物件的 Multiline 屬性,$ 也匹配 '\n' 或 '\r' 之前的位置, |
| * | 匹配前面的子運算式零次或多次,例如,zo* 能匹配 "z" 以及 "zoo",* 等價于{0,}, |
| + | 匹配前面的子運算式一次或多次,例如,'zo+' 能匹配 "zo" 以及 "zoo",但不能匹配 "z",+ 等價于 {1,}, |
| ? | 匹配前面的子運算式零次或一次,例如,"do(es)?" 可以匹配 "do" 或 "does" ,? 等價于 {0,1}, |
| {n} | n 是一個非負整數,匹配確定的 n 次,例如,'o{2}' 不能匹配 "Bob" 中的 'o',但是能匹配 "food" 中的兩個 o, |
| {n,} | n 是一個非負整數,至少匹配n 次,例如,'o{2,}' 不能匹配 "Bob" 中的 'o',但能匹配 "foooood" 中的所有 o,'o{1,}' 等價于 'o+','o{0,}' 則等價于 'o*', |
| {n,m} | m 和 n 均為非負整數,其中n <= m,最少匹配 n 次且最多匹配 m 次,例如,"o{1,3}" 將匹配 "fooooood" 中的前三個 o,'o{0,1}' 等價于 'o?',請注意在逗號和兩個數之間不能有空格, |
| ? | 當該字符緊跟在任何一個其他限制符 (*, +, ?, {n}, {n,}, {n,m}) 后面時,匹配模式是非貪婪的,非貪婪模式盡可能少的匹配所搜索的字串,而默認的貪婪模式則盡可能多的匹配所搜索的字串,例如,對于字串 "oooo",'o+?' 將匹配單個 "o",而 'o+' 將匹配所有 'o', |
| . | 匹配除換行符(\n、\r)之外的任何單個字符,要匹配包括 '\n' 在內的任何字符,請使用像"(.|\n)"的模式, |
| (pattern) | 匹配 pattern 并獲取這一匹配,所獲取的匹配可以從產生的 Matches 集合得到,在VBScript 中使用 SubMatches 集合,在JScript 中則使用 $0…$9 屬性,要匹配圓括號字符,請使用 '(' 或 ')', |
| (?:pattern) | 匹配 pattern 但不獲取匹配結果,也就是說這是一個非獲取匹配,不進行存盤供以后使用,這在使用 "或" 字符 (|) 來組合一個模式的各個部分是很有用,例如, 'industr(?:y|ies) 就是一個比 'industry|industries' 更簡略的運算式, |
| (?=pattern) | 正向肯定預查(look ahead positive assert),在任何匹配pattern的字串開始處匹配查找字串,這是一個非獲取匹配,也就是說,該匹配不需要獲取供以后使用,例如,"Windows(?=95|98|NT|2000)"能匹配"Windows2000"中的"Windows",但不能匹配"Windows3.1"中的"Windows",預查不消耗字符,也就是說,在一個匹配發生后,在最后一次匹配之后立即開始下一次匹配的搜索,而不是從包含預查的字符之后開始, |
| (?!pattern) | 正向否定預查(negative assert),在任何不匹配pattern的字串開始處匹配查找字串,這是一個非獲取匹配,也就是說,該匹配不需要獲取供以后使用,例如"Windows(?!95|98|NT|2000)"能匹配"Windows3.1"中的"Windows",但不能匹配"Windows2000"中的"Windows",預查不消耗字符,也就是說,在一個匹配發生后,在最后一次匹配之后立即開始下一次匹配的搜索,而不是從包含預查的字符之后開始, |
| (?<=pattern) | 反向(look behind)肯定預查,與正向肯定預查類似,只是方向相反,例如,"(?<=95|98|NT|2000)Windows"能匹配"2000Windows"中的"Windows",但不能匹配"3.1Windows"中的"Windows", |
| (?<!pattern) | 反向否定預查,與正向否定預查類似,只是方向相反,例如"(?<!95|98|NT|2000)Windows"能匹配"3.1Windows"中的"Windows",但不能匹配"2000Windows"中的"Windows", |
| x|y | 匹配 x 或 y,例如,'z|food' 能匹配 "z" 或 "food",'(z|f)ood' 則匹配 "zood" 或 "food", |
| [xyz] | 字符集合,匹配所包含的任意一個字符,例如, '[abc]' 可以匹配 "plain" 中的 'a', |
| [^xyz] | 負值字符集合,匹配未包含的任意字符,例如, 'abc' 可以匹配 "plain" 中的'p'、'l'、'i'、'n', |
| [a-z] | 字符范圍,匹配指定范圍內的任意字符,例如,'[a-z]' 可以匹配 'a' 到 'z' 范圍內的任意小寫字母字符, |
| [^a-z] | 負值字符范圍,匹配任何不在指定范圍內的任意字符,例如,'a-z' 可以匹配任何不在 'a' 到 'z' 范圍內的任意字符, |
| \b | 匹配一個單詞邊界,也就是指單詞和空格間的位置,例如, 'er\b' 可以匹配"never" 中的 'er',但不能匹配 "verb" 中的 'er', |
| \B | 匹配非單詞邊界,'er\B' 能匹配 "verb" 中的 'er',但不能匹配 "never" 中的 'er', |
| \cx | 匹配由 x 指明的控制字符,例如, \cM 匹配一個 Control-M 或回車符,x 的值必須為 A-Z 或 a-z 之一,否則,將 c 視為一個原義的 'c' 字符, |
| \d | 匹配一個數字字符,等價于 [0-9], |
| \D | 匹配一個非數字字符,等價于 0-9, |
| \f | 匹配一個換頁符,等價于 \x0c 和 \cL, |
| \n | 匹配一個換行符,等價于 \x0a 和 \cJ, |
| \r | 匹配一個回車符,等價于 \x0d 和 \cM, |
| \s | 匹配任何空白字符,包括空格、制表符、換頁符等等,等價于 [ \f\n\r\t\v], |
| \S | 匹配任何非空白字符,等價于 \f\n\r\t\v, |
| \t | 匹配一個制表符,等價于 \x09 和 \cI, |
| \v | 匹配一個垂直制表符,等價于 \x0b 和 \cK, |
| \w | 匹配字母、數字、下劃線,等價于'[A-Za-z0-9_]', |
| \W | 匹配非字母、數字、下劃線,等價于 'A-Za-z0-9_', |
| \xn | 匹配 n,其中 n 為十六進制轉義值,十六進制轉義值必須為確定的兩個數字長,例如,'\x41' 匹配 "A",'\x041' 則等價于 '\x04' & "1",正則運算式中可以使用 ASCII 編碼, |
| \num | 匹配 num,其中 num 是一個正整數,對所獲取的匹配的參考,例如,'(.)\1' 匹配兩個連續的相同字符, |
| \n | 標識一個八進制轉義值或一個向后參考,如果 \n 之前至少 n 個獲取的子運算式,則 n 為向后參考,否則,如果 n 為八進制數字 (0-7),則 n 為一個八進制轉義值, |
| \nm | 標識一個八進制轉義值或一個向后參考,如果 \nm 之前至少有 nm 個獲得子運算式,則 nm 為向后參考,如果 \nm 之前至少有 n 個獲取,則 n 為一個后跟文字 m 的向后參考,如果前面的條件都不滿足,若 n 和 m 均為八進制數字 (0-7),則 \nm 將匹配八進制轉義值 nm, |
| \nml | 如果 n 為八進制數字 (0-3),且 m 和 l 均為八進制數字 (0-7),則匹配八進制轉義值 nml, |
| \un | 匹配 n,其中 n 是一個用四個十六進制數字表示的 Unicode 字符,例如, \u00A9 匹配著作權符號 (?), |
學完這一節,大概對正則運算式的基礎學習更進一步,至于上面提到了還有匹配先后級等等問題,可以自行搜索,基礎語法很重要,用法學個例子就可以了,加油!!

轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/356692.html
標籤:JavaScript
下一篇:正則基礎(復習+學習)
