點字符(.
)匹配除回車(\r
)、換行(\n
) 、行分隔符(\u2028
)和段分隔符(\u2029
)之外的全部字符。注意,對於碼點大於0xFFFF
字符,點字符不能正確匹配,會認爲這是兩個字符。javascript
注意:只匹配一個字符html
位置字符用來提示字符所處的位置,主要有兩個字符。java
^
表示字符串的開始位置$
表示字符串的結束位置^表示字符串的開頭
,^\d
表示必須以數字開頭。正則表達式
$表示字符串的結束
,\d$
表示必須以數字結束。編碼
|
)豎線符號(|
)在正則表達式中表示「或關係」(OR),即cat|dog
表示匹配cat
或dog
。spa
注意:選擇符會包括它先後的多個字符,若是想修改這個行爲,可使用圓括號。code
其餘的元字符還包括\
、\*
、+
、?
、()
、[]
、{}
等regexp
正則表達式中,須要反斜槓轉義的,一共有12個字符:^
、.
、[
、$
、(
、)
、|
、*
、+
、?
、{
和\
。須要特別注意的是,若是使用RegExp
方法生成正則對象,轉義須要使用兩個斜槓,由於字符串內部會先轉義一次。htm
\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 字符。字符類(class)表示有一系列字符可供選擇,只要匹配其中一個就能夠了。全部可供選擇的字符都放在方括號內,好比[xyz]
表示x
、y
、z
之中任選一個匹配。對象
有兩個字符在字符類中有特殊含義。
(1)脫字符(^)
若是方括號內的第一個字符是[^]
,則表示除了字符類之中的字符,其餘字符均可以匹配。好比,[^xyz]
表示除了x
、y
、z
以外均可以匹配。
若是方括號內沒有其餘字符,即只有[^]
,就表示匹配一切字符,其中包括換行符。
(2)連字符(-)
某些狀況下,對於連續序列的字符,連字符(-
)用來提供簡寫形式,表示字符的連續範圍。好比,[abc]
能夠寫成[a-c]
,[0123456789]
能夠寫成[0-9]
,同理[A-Z]
表示26個大寫字母。
注意:當連字號(dash)不出如今方括號之中,就不具有簡寫的做用,只表明字面的含義
字符類[1-31]
,不表明1
到31
,只表明1
到3
另外,不要過度使用連字符,設定一個很大的範圍,不然極可能選中意料以外的字符。最典型的例子就是[A-z]
,表面上它是選中從大寫的A
到小寫的z
之間52個字母,可是因爲在 ASCII 編碼之中,大寫字母與小寫字母之間還有其餘字符,結果就會出現意料以外的結果。
預約義模式指的是某些常見模式的簡寫方式。
\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
匹配非詞邊界,即在詞的內部。模式的精確匹配次數,使用大括號({}
)表示。{n}
表示剛好重複n
次,{n,}
表示至少重複n
次,{n,m}
表示重複很多於n
次,很少於m
次。
量詞符用來設定某個模式出現的次數。
?
問號表示某個模式出現0次或1次,等同於{0, 1}
。*
星號表示某個模式出現0次或屢次,等同於{0,}
。+
加號表示某個模式出現1次或屢次,等同於{1,}
。上述的三個量詞符,默認狀況下都是最大可能匹配,即匹配直到下一個字符不知足匹配規則爲止。這被稱爲貪婪模式。
若是想將貪婪模式改成非貪婪模式,能夠在量詞符後面加一個問號。
+?
:表示某個模式出現1次或屢次,匹配時採用非貪婪模式。*?
:表示某個模式出現0次或屢次,匹配時採用非貪婪模式。??
:表格某個模式出現0次或1次,匹配時採用非貪婪模式。修飾符(modifier)表示模式的附加規則,放在正則模式的最尾部。
默認狀況下,第一次匹配成功後,正則對象就中止向下匹配了。g
修飾符表示全局匹配(global),加上它之後,正則對象將匹配所有符合條件的結果,主要用於搜索和替換。
默認狀況下,正則對象區分字母的大小寫,加上i
修飾符之後表示忽略大小寫(ignoreCase)。
m
修飾符表示多行模式(multiline),會修改^
和$
的行爲。默認狀況下(即不加m
修飾符時),^
和$
匹配字符串的開始處和結尾處,加上m
修飾符之後,^
和$
還會匹配行首和行尾,即^
和$
會識別換行符(\n
)。
注意:加上m
修飾符之後,換行符\n
也會被認爲是一行的開始。
/^b/m.test('a\nb') // true
正則表達式的括號表示分組匹配,括號中的模式能夠用來匹配分組的內容。
參考資料:
https://wangdoc.com/javascript/stdlib/regexp.html
https://www.liaoxuefeng.com/wiki/897692888725344/923056128128864