天天看點

正規表達式學習記錄符号說明

符号說明

不友善書寫的符号使用轉義符 "\" 來取消特殊語義例如^表示字元串的開始\^則表示比對^這個符号。

通常大寫表示反義詞例如\d表示比對數字,\D表示比對非數字

常用比對字元

符号 說明
. 比對除換行外的所有字元
\w 比對所有字母數字,等同于 [a-zA-Z0-9_]
\d 比對數字: [0-9]
\s 比對所有空格字元,等同于: [\t\n\f\r\p{Z}]
\f 比對一個換頁符
\n 比對一個換行符
\r 比對一個回車符
\t 比對一個制表符
\v 比對一個垂直制表符
\p 比對 CR/LF(等同于 \r\n),用來比對 DOS 行終止符
字元,數字,空格字元有反義比對即\W,\D,\S

限定符,量詞

* 出現0次或多次
+ 出現1次或多次
? 出現0次或1次
{n} 出現n次
{n,m} 出現n次至m次,可不寫n或m表示至少n次或至多m次

貪婪比對

預設為貪戀比對,即預設盡可能多的比對

"/(.*at)/" =>

The fat cat sat on the mat.

惰性比對

在量詞後加上?可将比對模式修改為惰性比對,盡可能少的比對

"/(.*?at)/" =>

定位符

定位符僅比對位置并不比對指定字元

^ 開始位置
$ 結束位置
\b 比對單詞的開始或結束
\B 比對非單詞的開始或結束

範圍

| 比對左側或者右側, x|y 表示比對x或者y,左右可以是分組
[] 括号内為比對範圍,[avd],表示avd三個字母都可比對
[a-z] 表示比對連續的範圍a到z
[^a-z] 表示比對a到z之外的任意字元

分組

() 括号内為子表達式,子表達式可被引用
n為1-9之間的數字,在正規表達式中來引用表達式中的分組,例如(a)\1,等價于aa
分組之後的表達式可在文本編輯器中使用$n來引用

其他

正規表達式修飾符

不同語言對正規表達式有不同的修飾符例如忽略大小寫,多行比對等,js是在/表達式/修飾符 中配置。具體需要看使用語言中的實作。 js中正規表達式的标記,可組合使用,在正規表達式最後加上符号

g 全局比對
i 不區分大小寫
m 多行搜尋
s 允許.比對換行符
  • 預設正則會傳回第一個比對的結果,加上全局比對後會傳回所有比對的結果

"/.(at)/" =>

"/.(at)/g" =>

特殊字元比對

\xXX 編号在 0 ~ 255 範圍的字元,比如:點選測試 空格可以使用 "\x20" 表示
\uXXXX 任何字元可以使用 "\u" 再加上其編号的4位十六進制數表示,比如:點選測試 "\u4E2D"

比對規則,環視

(?:pattern) 捕獲但不單獨擷取結果
(?=pattern) 肯定查詢,僅當比對字元串符合字尾比對内容才判定為比對,例如Windows(?=95|98|NT|2000)
(?<=pattern) 效果同上但放在字元串前,比對字首,例如 (?<=95|98|NT|2000)Windows
(?!pattern) 否定查詢,僅當比對字元串不符合比對字尾才判定為比對
(?<!pattern) 效果同上但放在字元串之前,比對字首,例如 (?<!95|98|NT|2000)Windows

資料

  1. 将正規表達式圖形化,友善了解
https://regexper.com/ https://jex.im/regulex/

2.線上測試正則

https://regex101.com/r/AyAdgJ/1 https://regexr.com/
  1. 參考資料
https://blog.csdn.net/hello_word2/article/details/84890548 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions https://www.runoob.com/regexp/regexp-tutorial.html http://www.regexlab.com/zh/regref.htm https://xie.infoq.cn/article/dcc7103126233028945c67c43 https://github.com/ziishaned/learn-regex/blob/master/translations/README-cn.md

繼續閱讀