正則表達式實例搜集,通過實例來學習正則表達式。
- 2021 年 12 月 15 日
- 筆記
- javascript, Regex, 前端開發
正則表達式實例搜集,通過實例來學習正則表達式。本倉庫實例搜集整理來自於《一些正則表達式隨記》,通過一個單獨倉庫專門整理這些正則實例,提供一個實例網站,方便正則實例驗證和查詢。也方便添加新的正則實例大家共同維護。
Github: @jaywcjlove/regexp-example
如果有一些基礎知識,通過實例理解,將會更快速入門,寫出自己的正則。如果對基礎還不是很了解,你可以通過《Learn regex the easy way》去學習基礎知識,這個倉庫教程被翻譯成十幾種語言了,包含了中文翻譯,它通過極其簡單的實例,幫助你理解正則基礎語法規則。
表達式全集
元字元
正則表達式主要依賴於元字元。
元字元不代表他們本身的字面意思,他們都有特殊的含義。一些元字元寫在方括弧中的時候有一些特殊的意思。以下是一些元字元的介紹:
字元 | 描述 |
---|---|
. | 句號匹配任意單個字元除了換行符。要匹配包括 \n 在內的任何字元,請使用像 (.|\n) 的模式。 |
[ ] | 字元種類。匹配方括弧內的任意字元。 |
[^ ] | 否定的字元種類。匹配除了方括弧里的任意字元 |
* | 匹配 >=0 個重複的在 * 號之前的字元。例如,zo* 能匹配 z 以及 zoo 。* 等價於 {0,} 。 |
+ | 匹配 >=1 個重複的 + 號前的字元。例如, zo+ 能匹配 zo 以及 zoo ,但不能匹配 z 。+ 等價於 {1,} 。 |
? | 標記 ? 之前的字元為可選。例如,do(es)? 可以匹配 does 或 does 中的 do 。? 等價於 {0,1} 。 |
| | 或運算符,匹配符號前或後的字元。例如,`z |
\ | 轉義字元,用於匹配一些保留的字元 [ ] ( ) { } . * + ? ^ $ \ | |
^ | 從開始行開始匹配。 |
$ | 從末端開始匹配。 |
{n} | n 是一個非負整數。匹配確定的n次。例如, o{2} 不能匹配 Bob 中的 o ,但是能匹配 food 中的兩個 o 。 |
{n,} | n 是一個非負整數。至少匹配n次。例如, o{2,} 不能匹配 Bob 中的 o ,但能匹配 foooood 中的所有o。 o{1,} 等價於 o+ 。 o{0,} 則等價於 o* 。 |
{n,m} | m 和 n 均為非負整數,其中 n<=m 。最少匹配 n 次且最多匹配 m 次。例如,o{1,3} 將匹配 fooooood 中的前三個 o 。o{0,1} 等價於 o? 。請注意在逗號和兩個數之間不能有空格。 |
(xyz) | 字符集,匹配與 xyz 完全相等的字元串. |
[xyz] | 字符集合。匹配所包含的任意一個字元。例如,[abc] 可以匹配 plain 中的 a 。 |
[^xyz] | 負值字符集合。匹配未包含的任意字元。例如, [^abc] 可以匹配 plain 中的 p 。 |
[a-z] | 字元範圍。匹配指定範圍內的任意字元。例如,[a-z] 可以匹配 a 到 z 範圍內的任意小寫字母字元。 |
[^a-z] | 負值字元範圍。匹配任何不在指定範圍內的任意字元。例如,[^a-z] 可以匹配任何不在 a 到 z 範圍內的任意字元。 |
字符集簡寫
正則表達式提供一些常用的字符集簡寫。如下:
簡寫 | 描述 |
---|---|
. | 除換行符外的所有字元 |
\w | 匹配所有字母數字,等同於 [a-zA-Z0-9_] |
\W | 匹配所有非字母數字,即符號,等同於: [^\w] |
\d | 匹配數字: [0-9] |
\D | 匹配非數字: [^\d] |
\s | 匹配所有空格字元,等同於: [\t\n\f\r\p{Z}] |
\S | 匹配所有非空格字元: [^\s] |
\f | 匹配一個換頁符 |
\n | 匹配一個換行符 |
\r | 匹配一個回車符 |
\t | 匹配一個製表符 |
\v | 匹配一個垂直製表符 |
\p | 匹配 CR/LF(等同於 \r\n ),用來匹配 DOS 行終止符 |
\b | 匹配一個單詞邊界,指單詞和空格間的位置。例如,er\b 可以匹配 never 中的 er ,但不能匹配 verb 中的 er 。 |
\B | 匹配非單詞邊界。er\B 能匹配 verb 中的 er ,但不能匹配 never 中的 er 。 |
零寬度斷言
符號 | 描述 |
---|---|
?= | 正先行斷言-存在 |
?! | 負先行斷言-排除 |
?<= | 正後發斷言-存在 |
?<! | 負後發斷言-排除 |
標誌 – 模式修正符
標誌也叫模式修正符,因為它可以用來修改表達式的搜索結果。
這些標誌可以任意的組合使用,它也是整個正則表達式的一部分。
標誌 | 描述 |
---|---|
i | 忽略大小寫。 |
g | 全局搜索。 |
m | 多行修飾符:錨點元字元 ^ $ 工作範圍在每行的起始。 |
Example
身份證號
^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$
🚧 E.g: 42112319870115371X
軍官證
^[\u4E00-\u9FA5](字第)([0-9a-zA-Z]{4,8})(號?)$
🚧 E.g: 軍字第2001988號
,士字第P011816X號
。 軍/兵/士/文/職/廣/(其他中文) + “字第” + 4到8位字母或數字 + “號”
護照
^([a-zA-z]|[0-9]){5,17}$
🚧 E.g: 141234567
,G12345678
,P1234567
。14/15開頭 + 7位數字, G + 8位數字, P + 7位數字, S/D + 7或8位數字,等
港澳居民來往內地通行證
^([A-Z]\d{6,10}(\(\w{1}\))?)$
🚧 E.g: H1234567890
。H/M + 10位或6位數字
台灣居民來往大陸通行證
^\d{8}|^[a-zA-Z0-9]{10}|^\d{18}$
🚧 E.g: 12345678
,1234567890B
。新版8位或18位數字, 舊版10位數字 + 英文字母
用戶名
^[a-zA-Z0-9_-]{4,16}$
🚧 E.g: jaywcjlove
。驗證 數字、字母、_、–,不包含特殊字元,長度 4-16
之間。
微訊號
^[a-zA-Z]([-_a-zA-Z0-9]{5,19})+$
🚧 E.g: jslite
。微訊號正則,6至20位,以字母開頭,字母,數字,減號,下劃線。
密碼強度(寬鬆)
^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,10}$
🚧 E.g: diaoD123
, Wgood123
。必須是包含大小寫字母和數字的組合,長度在 8-10
之間。
^[0-9a-zA-Z\u4E00-\uFA29]*$
🚧 E.g: diaoD123
, Wgood123
。數字字母中文。
密碼強度(包含特殊字元)
^.*(?=.{6,})(?=.*\d)(?=.*[A-Z])(?=.*[a-z])(?=.*[!@#$%^&*? ]).*$
🚧 E.g: diaoD123#
, Wgood123#$
。密碼強度正則,最少6
位,包括至少1
個大寫字母,1
個小寫字母,1
個數字,1
個特殊字元。
火車車次
^[GCDZTSPKXLY1-9]\d{1,4}$
E.g: G2868
, D22
, D9
, Z5
, Z24
, Z17
漢字中文
^[\u4e00-\u9fa5]{0,}$
🚧 E.g: 中文
, 湖北
, 黃岡
。不限制文字長度。
^[\u4e00-\u9fa5]{2,6}$
🚧 E.g: 中文
, 湖北黃岡
。2到6位漢字
中文名字
^(?:[\u4e00-\u9fa5·]{2,16})$
🚧 E.g: 周杰倫
, 古麗娜扎爾·拜合提亞爾
, 拉希德·本·穆罕默德·本·拉希德
。
英文姓名
(^[a-zA-Z][a-zA-Z\s]{0,20}[a-zA-Z]$)
🚧 E.g: Gene Kelly
, Fred Astaire
, Humphrey Bogart
, GaryCooper
, Cary Grant
, Joan Crawford
URL
^[a-zA-Z]+:\/\/
🚧 E.g: //www.abc.com
, //
, //
^((https?|ftp|file):\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$
🚧 E.g: //github.com
, //github.com/jaywcjlove
^([a-zA-Z0-9]([a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,6}$
🚧 E.g: blog.csdn.net
Mac地址匹配
^([0-9a-fA-F][0-9a-fA-F]:){5}([0-9a-fA-F][0-9a-fA-F])$
🚧 E.g: dc:a9:04:77:37:20
圖片後綴
(.jpg|.gif|.png|.jpeg)+(\?|\#|$)
🚧 E.g: a/b/c.jpg?
, a/b/c.png
, a/b/c.png?good=1
傳真號碼
^(([0\+]\d{2,3}-)?(0\d{2,3})-)(\d{7,8})(-(\d{3,}))?$
🚧 E.g: 086-021-5055452
, 021-5055452
。國家程式碼(2到3位),區號(2到3位),電話號碼(7到8位),分機號(3位)
手機號碼
^1[34578]\d{9}$
🚧 E.g: 13611778887
^((\+?[0-9]{1,4})|(\(\+86\)))?(13[0-9]|14[57]|15[012356789]|17[03678]|18[0-9])\d{8}$
🚧 E.g: 13611779993
, +8613611779993
正則規則詳細說明
- 13段:130、131、132、133、134、135、136、137、138、139
- 14段:145、147
- 15段:150、151、152、153、155、156、157、158、159
- 17段:170、176、177、178
- 18段:180、181、182、183、184、185、186、187、188、189
- 國際碼 如:中國(+86)
MD5格式(32位)
^[a-f0-9]{32}$
🚧 E.g: a31851770dae6ee96fc886f261c211e7
, 99cd2175108d157588c04758296d1cfc
IPv4 地址
(\b25[0-5]|\b2[0-4][0-9]|\b[01]?[0-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}
🚧 E.g: 192.168.1.1
, 127.0.0.1
, 0.0.0.0
, 255.255.255.255
, 1.2.3.4
^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$
🚧 E.g: 192.168.1.1
, 127.0.0.1
, 0.0.0.0
, 255.255.255.255
, 1.2.3.4
IPv6
(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))
🚧 E.g: 2001:0db8:85a3:0000:0000:8a2e:0370:7334
, FE80:0000:0000:0000:0202:B3FF:FE1E:8329
。
^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$
🚧 E.g: [email protected]
^[a-z0-9]+([._\\-]*[a-z0-9])*@([a-z0-9]+[-a-z0-9]*[a-z0-9]+.){1,63}[a-z0-9]+$
🚧 E.g: [email protected]
正則規則詳細說明
- 郵箱以a-z、A-Z、0-9開頭,最小長度為1.
- 如果左側部分包含-、_、.則這些特殊符號的前面必須包一位數字或字母。
- @符號是必填項
- 右則部分可分為兩部分,第一部分為郵件提供商域名地址,第二部分為域名後綴,現已知的最短為2位。
最長的為6為。 - 郵件提供商域可以包含特殊字元-、_、.
十六進位顏色
^#?([a-fA-F0-9]{6}|[a-fA-F0-9]{3})$
🚧 E.g: #b8b8b8
, #333
^#?([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
🚧 E.g: #b8b8b8
, #333
日期
^(?:(?!0000)[0-9]{4}-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1[0-9]|2[0-8])|(?:0[13-9]|1[0-2])-(?:29|30)|(?:0[13578]|1[02])-31)|(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:0[48]|[2468][048]|[13579][26])00)-02-29)$
🚧 E.g: 2017-02-29
。對月份及日期驗證。
版本號
^\d+(?:\.\d+){2}$
🚧 E.g: 0.1.2
。格式必須為 X.Y.Z
。
車牌號
^[京津滬渝冀豫雲遼黑湘皖魯新蘇浙贛鄂桂甘晉蒙陝吉閩貴粵青藏川寧瓊使領][A-HJ-NP-Z](?:((\d{5}[A-HJK])|([A-HJK][A-HJ-NP-Z0-9][0-9]{4}))|[A-HJ-NP-Z0-9]{4}[A-HJ-NP-Z0-9掛學警港澳])$
🚧 E.g: 鄂A34324
, 滬E13359F
。包含新能源車牌。
^[京津滬渝冀豫雲遼黑湘皖魯新蘇浙贛鄂桂甘晉蒙陝吉閩貴粵青藏川寧瓊使領][A-HJ-NP-Z][A-HJ-NP-Z0-9]{4}[A-HJ-NP-Z0-9掛學警港澳]$
🚧 E.g: 鄂A34324
, 滬E13595
。不包含新能源車牌。
小數點後幾位
^(0|[1-9]\d*)(.[0-9]{2})$
🚧 E.g: 1.22
, , 0223.23
0.00
。精確到 2
位小數
小數
^\d+\.\d+$
🚧 E.g: 0.0
, 0.23
, 10.54
。
(-?\d+)(\.\d+)?
🚧 E.g: -0.0
, 0.23
, -10.54
。
正整數
[0-9]*[1-9][0-9]*
🚧 E.g: 23
負整數
-[0-9]*[1-9][0-9]*
🚧 E.g: -23
, -2.34
整數
-?\d+
🚧 E.g: 23
, 12
, -12.55
非負整數(正整數或零)
\d+
🚧 E.g: 23
, 3.322
數字
^\d{1,}$
🚧 E.g: 0120
,234234
。不包含小數。
^\d{32}$
🚧 E.g: 12232324444757575757575757575759
。32位純數字。
數字(QQ號碼)
^[1-9][0-9]{4,10}$
🚧 E.g: 398188661
。QQ號正則,5至11位。
^\d{5,11}$
🚧 E.g: 398188661
。更簡單的 QQ 號碼正則,5~11位數字組成。
中國郵政編碼
[1-9]\d{5}(?!\d)
🚧 E.g: 200000
。中國郵政編碼為 6 位數字。
英文字母
^[A-Z]+$
🚧 E.g: ABC
,WANG
。大寫英文字母。
^[a-z]+$
🚧 E.g: abc
,wang
。小寫英文字母。
(^[a-z]|[A-Z0-9])[a-z]*
🚧 E.g: Tests
,JavaScript
,RegEx
。大駝峰。
埠號
^((6553[0-5])|(655[0-2][0-9])|(65[0-4][0-9]{2})|(6[0-4][0-9]{3})|([1-5][0-9]{4})|([0-5]{0,5})|([0-9]{1,4}))$
🚧 E.g: 8080
,3000
,65535
迅雷鏈接
^thunderx?:\/\/[a-zA-Z\d]+=$
🚧 E.g: thunder://QUFodHRwOi0vdG0vbC5sdS90ZXN0LnppcFpa
。
ed2k鏈接
^ed2k:\/\/\|file\|.+\|\/$
🚧 E.g: ed2k://|file|[xxx.com][%E8%8B%B1%E9%9B%84%E6%9C%AC%E8%89%B23.mp4|/
。
磁力鏈接
^magnet:\?xt=urn:btih:[0-9a-fA-F]{40,}.*$
🚧 E.g: magnet:?xt=urn:btih:608FA22181A2614BAE9160763F04FCB7ED296B9E
時間
^(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d$
🚧 E.g: 21:54:55
,00:23:23
。24
小時制時間格式 HH:mm:ss
,並且驗證時間。
^(?:1[0-2]|0?[1-9]):[0-5]\d:[0-5]\d$
🚧 E.g: 12:54:55
,01:23:23
。12
小時制時間格式 HH:mm:ss
,並且驗證時間。
HTML標記
<(\S*?)[^>]*>.*?</\1>|<.*?/>
🚧 E.g: <div>title</div>
, <head>title</head>
。
HTML注釋
<!--(.*?)-->
🚧 E.g: <!-- hello -->
。
工具推薦
- RegExp 線上正則表達式學習利器。
- Regulex JavaScript 正則表達式可視化工具。 🇨🇳
- Rubular Ruby 正則表達式編輯器。
- Regex101 多語言支援、構建、調試並共享正則。
- Regexper 正則表達式可視化工具。
- RegEx Pal 正則表達式調試及練習示例。
- Regular Expression Tester 在線正則表達式測試儀。
- iHateRegex 正則表達式備忘清單。
- 以簡單的方式學習正則表達式
- Expressions APP 正則表達式應用 for Mac
- regexlearn.com 一步一步地學習正則,從零到高級。
License
Licensed under the MIT License.