符号說明
不友善書寫的符号使用轉義符 "\" 來取消特殊語義例如^表示字元串的開始\^則表示比對^這個符号。
通常大寫表示反義詞例如\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 |
資料
- 将正規表達式圖形化,友善了解
2.線上測試正則
https://regex101.com/r/AyAdgJ/1 https://regexr.com/- 參考資料