1,字面量字符和元字符
大部分字符在正則表達式中,就是字面的含義,比如 /a/ 匹配 a, /b/ 匹配b。這種只表示它字面量含義的被稱為字面量字符。
除了字面量,還有一些字符有特殊含義,不代表字面意思,被稱為元字符
1,點字符(.)
點字符匹配除回車(\r)、換行(\n)、行分隔符(\u2028)和分段符(\u2029)之外的所有字符 注:碼點大於0xFFFF的Unicode字符不能被匹配,因為會被認為是兩個字符。
2,位置字符
^ 表示字符串的開始位置, $ 表示字符串的結束位置。
3,選擇符(|)
豎線符號在正則中表示 ‘或關系’ , 即匹配其中之一即可。
.............等等
2,轉義符
正則中那些有特殊含義的元字符,如果要匹配它們本身,就要在前面加反斜杠。 比如要匹配 +, 就必須寫成 \+;
在正則中,需要反斜杠轉義的一共有12個字符: ^ . [ $ ( ) | * + ? { \\ 注:如果使用RegExp方法生成正則,轉義需要加兩個斜杠,因為字符串需要先轉義一次。
3,特殊字符
\r 匹配回車符
\t 匹配制表符 tab
\n 匹配換行符
\v 匹配垂直制表符
\f 匹配換頁符
\0 匹配null字符
4,字符類
字符類表示有一系列字符可供選擇,只要匹配其中一個就可以。所有可供選擇的字符放在中括號內,比如[abc] 表示 a b c之中任選一個。
1,脫字符(^)
如果方括號內的第一個字符為 ^ , 則表示取反。 [^]表示匹配一切字符。
2,連字符(-)
對於連續序列的字符,可以用-來進行簡寫。 a-z 0-9 A-Z -u4e00-\u9fa5
5,預定義模式
\d 匹配0-9的數字, 相當於[0-9]
\D 匹配非0-9的字符。 相當於[^0-9]
\w 匹配任意字母數字下划線。 相當於[0-9a-zA-Z_]
\W 相當於\w取反
\s 匹配空格(包括換行符、制表符、空格符), 相當於[ \t\r\n\v\f]
\S 相當於\s取反
\b 匹配單詞邊界
\B 匹配非單詞邊界,即在詞的內部
6,重復類
模式的匹配次數,使用大括號{ }表示,{n}表示重復n次,{n,}表示至少重復n次,{n,m}表示重復不少於n次,不多於m次。
7,量詞符
量詞符用來設定某個模式出現的次數。
?問號表示某個模式出現0次或1次, 等同於{0, 1};
* 星號表示出現0次或多次,等同於{0, }
+ 加號表示出現1次或多次, 等同於{1, }
8,貪婪模式
量詞符默認情況下都是最大可能匹配,即匹配到不能匹配為止,這種模式就叫貪婪模式
/a+/ 表示匹配1個或多個a,那么到底會匹配幾個a呢? 因為默認的是貪婪模式,所以會一直匹配到后面不是a為止。
如果想將貪婪模式改為非貪婪模式,可以在量詞后面加一個問號。這時候一旦滿足條件,就不再往下匹配了。
*?表示某個模式出現0次或者多次,采用非貪婪模式
+?表示模式出現1次或者多次,采用非貪婪模式
9,修飾符
g 表示全局匹配
i 表示忽略大小寫
m 表示多行模式。會修改^和$的行為。 加了m修飾符后,^和$會識別換行符( \n )
10, 組匹配
1,正則中的括號()表示分組匹配,括號中的模式表示分組中的內容。
在正則表達式內部, 還可以使用 \n 來引用括號匹配的內容, n是從1開始,表示對應順序的括號
/(.)b(.)\1b\2/.test('abcabc'); \1匹配了第一個括號的a, \2匹配了第二個括號的c
2,非捕獲組
(?:x)稱為非捕獲組,表示不返回該組匹配的內容。
3,先行斷言
x(?=y)稱為先行斷言。x只有在y前面才匹配,y不計入匹配結果中。
4,先行否定斷言
x(?!y) 為先行否定斷言。 x只有不在y前面才匹配。
用通俗的語句來解釋上面的這些:
x(?! y): x只有不在y前面才匹配
x(?=a): 表示在a的前面 才匹配。
x(?<= a): 表示a的后面才匹配
x(?<! a): 表示需要不匹配某個模式, 與 (?!a)相反
符加項----- 一些常用的正則:
1,郵箱: /[\w!#$%&'*+/=?^_`{|}~-]+(?:\.[\w!#$%&'*+/=?^_`{|}~-]+)*@(?:[\w](?:[\w-]*[\w])?\.)+[\w](?:[\w-]*[\w])?/ (餓了么官網input驗證郵箱用的正則, 大廠出品應該沒毛病吧!)