JavaScript-正則表達式

匹配規則

一、元字符

點字符(.)

點字符(.)匹配除回車(\r)、換行(\n) 、行分隔符(\u2028)和段分隔符(\u2029)之外的全部字符。注意,對於碼點大於0xFFFF字符,點字符不能正確匹配,會認爲這是兩個字符。javascript

注意:只匹配一個字符html

位置字符

位置字符用來提示字符所處的位置,主要有兩個字符。java

  • ^ 表示字符串的開始位置
  • $ 表示字符串的結束位置

^表示字符串的開頭^\d表示必須以數字開頭。正則表達式

$表示字符串的結束\d$表示必須以數字結束。編碼

選擇符(|

豎線符號(|)在正則表達式中表示「或關係」(OR),即cat|dog表示匹配catdogspa

注意:選擇符會包括它先後的多個字符,若是想修改這個行爲,可使用圓括號。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] 表示xyz之中任選一個匹配。對象

有兩個字符在字符類中有特殊含義。

(1)脫字符(^)

若是方括號內的第一個字符是[^],則表示除了字符類之中的字符,其餘字符均可以匹配。好比,[^xyz]表示除了xyz以外均可以匹配。

若是方括號內沒有其餘字符,即只有[^],就表示匹配一切字符,其中包括換行符。

(2)連字符(-)

某些狀況下,對於連續序列的字符,連字符(-)用來提供簡寫形式,表示字符的連續範圍。好比,[abc]能夠寫成[a-c][0123456789]能夠寫成[0-9],同理[A-Z]表示26個大寫字母。

注意:當連字號(dash)不出如今方括號之中,就不具有簡寫的做用,只表明字面的含義

 字符類[1-31],不表明131,只表明13

另外,不要過度使用連字符,設定一個很大的範圍,不然極可能選中意料以外的字符。最典型的例子就是[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 修飾符

默認狀況下,第一次匹配成功後,正則對象就中止向下匹配了。g修飾符表示全局匹配(global),加上它之後,正則對象將匹配所有符合條件的結果,主要用於搜索和替換。

i 修飾符

默認狀況下,正則對象區分字母的大小寫,加上i修飾符之後表示忽略大小寫(ignoreCase)。

m修飾符

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

相關文章
相關標籤/搜索