什么是正則運算式
正則運算式,又稱規則運算式,(Regular Expression,在代碼中常簡寫為 regex、regexp 或 RE),是一種文本模式,包括普通字符(例如,a 到 z 之間的字母)和特殊字符(稱為"元字符"),是計算機科學的一個概念,正則運算式使用單個字串來描述、匹配一系列匹配某個句法規則的字串,通常被用來檢索、替換那些符合某個模式(規則)的文本
正則在線測驗工具 https://regexr-cn.com/
正則刷題網 程式膠囊 https://codejiaonang.com/#/course/regex_chapter2/0/0
部分內容轉載于Road To Coding
創建一個正則運算式
- 使用建構式創建
/*
pattern(模式) 描述了運算式的模式
modifiers(修飾符) 用于指定全域匹配、區分大小寫的匹配和多行匹配
*/
let patt1 = new RegExp(pattern, modifiers);
//例子
let str = "唱跳rap打籃球";
let patt2 = new RegExp("rap", "g");
console.log(patt2.test(str)); //true
- 使用字面量形式創建
let str = "唱跳rap打籃球";
let re = /rap/g;
console.log(re.test(str)); //true
注意:當使用建構式創造正則物件時,需要常規的字符轉義規則(在前面加反斜杠 \)
let re = new RegExp("\\w+");
let re = /\w+/;
基礎正則運算式速查表
1.字符
| 運算式 | 描述 |
|---|---|
[abc] |
字符集,匹配集合中所含的任一字符 |
[^abc] |
否定字符集,匹配任何不在集合中的字符 |
[a-z] |
字符范圍,匹配指定范圍內的任意字符 |
. |
匹配除換行符以外的任何單個字符, |
\ |
轉義字符 |
\w |
匹配任何字母數字,包括下劃線(等價于[A-Za-z0-9_]) |
\W |
匹配任何非字母數字(等價于[^a-za-z0-9_]) |
\d |
數字,匹配任何數字 |
\D |
非數字,匹配任何非數字字符 |
\s |
空白,匹配任何空白字符,包括空格、制表符等 |
\S |
非空白,匹配任何非空白字符 |
2.分組和參考
| 運算式 | 描述 |
|---|---|
(expression) |
分組,匹配括號里的整個運算式 |
(?:expression) |
非捕獲分組,匹配括號里的整個字串但不獲取匹配結果,拿不到分組參考 |
\num |
回溯參考 對前面所匹配分組的參考,比如(\d)\1 可以匹配兩個相同的數字,(Code)(Sheep)\1\2 則可以匹配 CodeSheepCodeSheep |
3.錨點/邊界
| 運算式 | 描述 |
|---|---|
^ |
匹配字串或行開頭 |
$ |
匹配字串或行結尾 |
\b |
匹配單詞邊界,比如 Sheep\b 可以匹配 CodeSheep 末尾的 Sheep,不能匹配 CodeSheepCode 中的 Sheep |
\B |
匹配非單詞邊界,比如 Code\B 可以匹配 HelloCodeSheep 中的 Code,不能匹配 HelloCode 中的 Code |
4.量詞
| 運算式 | 描述 |
|---|---|
? |
匹配前面的運算式0個或1個,即表示可選項, |
+ |
匹配前面的運算式至少1個, |
* |
匹配前面的運算式0個或多個, |
\| |
或運算子,并集,可以匹配符號前后的運算式, |
{m} |
匹配前面的運算式m個, |
{m,} |
匹配前面的運算式最少m個, |
{m,n} |
匹配前面的運算式最少m個,最多n個, |
5.預查斷言
| 運算式 | 描述 |
|---|---|
(?=) |
正向先行斷言:(?=運算式),指在某個位置向右看,表示所在位置右側必須能匹配運算式 |
(?!) |
反向先行斷言(?!運算式)的作用是保證右邊不能出現某字符 |
(?<=) |
正向后行斷言:(?<=運算式),指在某個位置向左看,表示所在位置左側必須能匹配運算式 |
(?<!) |
反向后行斷言:(?<!運算式),指在某個位置向左看,表示所在位置左側不能匹配運算式 |
6.特殊標志
| 運算式 | 描述 |
|---|---|
/.../i |
忽略大小寫, |
/.../g |
全域匹配, |
/.../m |
多行修飾符,用于多行匹配, |
常用正則運算式示例
-
數字效驗
| 描述 | 正則運算式 | 備注 |
| 數字 | ^[0-9]*$ |
|
| n位數字 | ^\d{n}$ |
|
| 至少n位數字 | ^\d{n,}$ |
|
| m~n位數字 | ^\d{m,n}$ |
|
| 整數 | ^(-?[1-9]\d*)$ |
非0開頭,包括正整數和負整數 |
| 正整數 | ^[1-9]\d*$ |
|
| 負整數 | ^-[1-9]\d*$ |
|
| 非負整數 | ^(([1-9]\d*)|0)$ |
|
| 非正整數 | ^((-[1-9]\d*)|0)$ |
|
| 浮點數 | ^-?(?:[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0\.0+|0)$ |
包括正浮點數和負浮點數 |
| 正浮點數 | ^(?:[1-9]\d*\.\d*|0\.\d*[1-9]\d*)$ |
|
| 負浮點數 | ^-(?:[1-9]\d*\.\d*|0\.\d*[1-9]\d*)$ |
|
| 非正浮點數 | ^(?:-(?:[1-9]\d*\.\d+|0\.\d*[1-9]\d*)|0\.0+|0)$ |
包含0 |
| 非負浮點數 | ^(?:[1-9]\d*\.\d+|0\.\d+|0\.0+|0)$ |
包含0 |
| 僅一位小數 | ^-?(?:0|[1-9][0-9]*)\.[0-9]{1}$ |
|
| 最少一位小數 | ^-?(?:0|[1-9][0-9]*)\.[0-9]{1,}$ |
|
| 最多兩位小數 | ^-?(?:0|[1-9][0-9]*)\.[0-9]{1,2}$ |
|
| 連續重復的數字 | ^(\d)\1+$ |
例如:111,222 |
-
字符校驗
| 描述 | 正則運算式 | 備注 |
| 中文 | ^[\u4E00-\u9FA5]+$ |
|
| 全角字符 | ^[\uFF00-\uFFFF]+$ |
|
| 半角字符 | ^[\u0000-\u00FF]+$ |
|
| 英文字串(大寫) | ^[A-Z]+$ |
|
| 英文字串(小寫) | ^[a-z]+$ |
|
| 英文字串(不區分大小寫) | ^[A-Za-z]+$ |
|
| 中文和數字 | ^(?:[\u4E00-\u9FA5]{0,}|\d)+$ |
|
| 英文和數字 | ^[A-Za-z0-9]+$ |
|
| 數字、英文字母或者下劃線組成的字串 | ^\w+$ |
|
| 中文、英文、數字包括下劃線 | ^[\u4E00-\u9FA5\w]+$ |
|
| 不含字母的字串 | ^[^A-Za-z]*$ |
|
| 連續重復的字串 | ^(.)\1+$ |
例如:aa,bb |
| 長度為n的字串 | ^.{n}$ |
|
| ASCII | ^[ -~]$ |
-
日期和時間校驗
| 描述 | 正則運算式 | 備注 |
| 日期 | ^\d{1,4}-(?:1[0-2]|0?[1-9])-(?:0?[1-9]|[1-2]\d|30|31)$ |
弱校驗,例如:2022-06-12 |
| 日期 | ^(?:(?!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)$ |
嚴格校驗,考慮平閏年 |
| 時間 | ^(?:1[0-2]|0?[1-9]):[0-5]\d:[0-5]\d$ |
12小時制,例如:11:21:31 |
| 時間 | ^(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d$ |
24小時制,例如:23:21:31 |
| 日期+時間 | ^(\d{1,4}-(?:1[0-2]|0?[1-9])-(?:0?[1-9]|[1-2]\d|30|31)) ((?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d)$ |
例如:2000-11-11 23:20:21 |
-
日常生活相關
| 描述 | 正則運算式 | 備注 |
| 中文名 | ^[\u4E00-\u9FA5·]{2,16}$ |
|
| 英文名 | ^[a-zA-Z][a-zA-Z\s]{0,20}[a-zA-Z]$ |
|
| 車牌號 | ^[京津滬渝冀豫云遼黑湘皖魯新蘇浙贛鄂桂甘晉蒙陜吉閩貴粵青藏川寧瓊使領][A-HJ-NP-Z][A-HJ-NP-Z0-9]{4}[A-HJ-NP-Z0-9掛學警港澳]$ |
不含新能源 |
| 車牌號 | ^[京津滬渝冀豫云遼黑湘皖魯新蘇浙贛鄂桂甘晉蒙陜吉閩貴粵青藏川寧瓊使領][A-HJ-NP-Z](?:(?:[A-HJ-NP-Z0-9]{4}[A-HJ-NP-Z0-9掛學警港澳])|(?:(?:\d{5}[A-HJK])|(?:[A-HJK][A-HJ-NP-Z0-9][0-9]{4})))$ |
包含新能源 |
| 火車車次 | ^[GCDZTSPKXLY1-9]\d{1,4}$ |
例如:G1234 |
| 手機號 | ^(?:(?:\+|00)86)?1[3-9]\d{9}$ |
弱匹配 |
| 手機號 | ^(?:(?:\+|00)86)?1(?:(?:3[\d])|(?:4[5-79])|(?:5[0-35-9])|(?:6[5-7])|(?:7[0-8])|(?:8[\d])|(?:9[189]))\d{8}$ |
嚴格匹配 |
| 固話號碼 | ^(?:(?:\d{3}-)?\d{8}|^(?:\d{4}-)?\d{7,8})(?:-\d+)?$ |
|
| 手機IMEI碼 | ^\d{15,17}$ |
一般是15位 |
| 郵編 | ^(?:0[1-7]|1[0-356]|2[0-7]|3[0-6]|4[0-7]|5[1-7]|6[1-7]|7[0-5]|8[013-6])\d{4}$ |
例如:211100 |
| 統一社會信用代碼 | ^[0-9A-HJ-NPQRTUWXY]{2}\d{6}[0-9A-HJ-NPQRTUWXY]{10}$ |
|
| 身份證號碼(1代) | ^[1-9]\d{7}(?:0\d|10|11|12)(?:0[1-9]|[1-2][\d]|30|31)\d{3}$ |
15位數字 |
| 身份證號碼(2代) | ^[1-9]\d{5}(?:18|19|20)\d{2}(?:0[1-9]|10|11|12)(?:0[1-9]|[1-2]\d|30|31)\d{3}[0-9Xx]$ |
18位數字 |
| QQ號 | ^[1-9][0-9]{4,}$ |
一般是5到10位 |
| 微信號 | ^[a-zA-Z][-_a-zA-Z0-9]{5,19}$ |
一般6~20位,字母開頭,可包含字母、數字、-、_,不含特殊字符 |
| 股票代碼 | ^(s[hz]|S[HZ])(000[\d]{3}|002[\d]{3}|300[\d]{3}|600[\d]{3}|60[\d]{4})$ |
A股,例如:600519 |
| 銀行卡卡號 | ^[1-9]{1}(?:\d{15}|\d{18})$ |
一般為19位 |
-
互聯網相關
| 描述 | 正則運算式 | 備注 |
| 域名 | ^[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(?:\.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+$ |
例如:r2coding.com |
| 網址 | ^(?:https?:\/\/)?[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(?:\.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+$ |
例如:https://www.r2coding.com/ |
| 帶埠號的網址(或IP) | ^(?:https?:\/\/)?[\w-]+(?:\.[\w-]+)+:\d{1,5}\/?$ |
例如:http://127.0.0.1:8888/ |
| URL | ^https?:\/\/(?:www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b(?:[-a-zA-Z0-9()!@:%_\+.~#?&\/\/=]*)$ |
例如:https://www.r2coding.com/#/README?id=1 |
| 郵箱email | ^[A-Za-z0-9\u4e00-\u9fa5]+@[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(?:\.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+$ |
支持中文,例如:[email protected] |
| 用戶名 | ^[a-zA-Z0-9_-]{4,20}$ |
4到20位 |
| 弱密碼 | ^[\w]{6,16}$ |
6~16位,包含大小寫字母和數字的組合 |
| 強密碼 | ^.*(?=.{6,})(?=.*\d)(?=.*[A-Z])(?=.*[a-z])(?=.*[!@\.#$%^&*? ]).*$ |
至少6位,包括至少1個大寫字母,1個小寫字母,1個數字,1個特殊字符 |
| 埠號 | ^(?:[0-9]|[1-9][0-9]{1,3}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5])$ |
例如:65535 |
| IPv4地址 | ^(?:(?:\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.){3}(?:\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])$ |
例如:192.168.31.1 |
| IPv4地址+埠 | ^(?:(?:\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.){3}(?:\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])(?::(?:[0-9]|[1-9][0-9]{1,3}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5]))?$ |
例如:192.168.31.1:8080 |
| 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]))$ |
例如:CDCD:910A:2222:5498:8475:1111:3900:2020 |
| 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]))\](?::(?:[0-9]|[1-9][0-9]{1,3}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5]))?$ |
例如:[CDCD:910A:2222:5498:8475:1111:3900:2020]:9800 |
| 子網掩碼 | ^(?:254|252|248|240|224|192|128)\.0\.0\.0|255\.(?:254|252|248|240|224|192|128|0)\.0\.0|255\.255\.(?:254|252|248|240|224|192|128|0)\.0|255\.255\.255\.(?:255|254|252|248|240|224|192|128|0)$ |
例如:255.255.255.0 |
| MAC地址 | ^(?:(?:[a-f0-9A-F]{2}:){5}|(?:[a-f0-9A-F]{2}-){5})[a-f0-9A-F]{2}$ |
|
| Version版本號 | ^\d+(?:\.\d+){2}$ |
例如:12.1.1 |
| 圖片后綴 | \.(gif|png|jpg|jpeg|webp|svg|psd|bmp|tif)+ |
可按需增刪擴展名集合 |
| 視頻后綴 | \.(swf|avi|flv|mpg|rm|mov|wav|asf|3gp|mkv|rmvb|mp4)+ |
可按需增刪擴展名集合 |
| 圖片鏈接 | (?:https?:\/\/)?[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(?:\.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+.+\.(gif|png|jpg|jpeg|webp|svg|psd|bmp|tif) |
可按需增刪擴展名集合 |
| 視頻鏈接 | (?:https?:\/\/)?[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(?:\.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+.+\.(swf|avi|flv|mpg|rm|mov|wav|asf|3gp|mkv|rmvb|mp4) |
可按需增刪擴展名集合 |
| 迅雷鏈接 | thunderx?:\/\/[a-zA-Z\d]+= |
|
| ed2k鏈接 | ed2k:\/\/\|file\|.+\|\/ |
|
| 磁力鏈接 | magnet:\?xt=urn:btih:[0-9a-fA-F]{40,}.* |
-
其他
| 描述 | 正則運算式 | 備注 |
| MD5格式 | ^(?:[a-f\d]{32}|[A-F\d]{32})$ |
32位MD5,例如:7552E7071B118CBFFEC8C930455B4297 |
| BASE64格式 | ^\s*data:(?:[a-z]+\/[a-z0-9-+.]+(?:;[a-z-]+=[a-z0-9-]+)?)?(?:;base64)?,([a-z0-9!$&',()*+;=\-._~:@/?%\s]*?)\s*$ |
例如:data:image/jpeg;base64,xxxx== |
| UUID | ^[a-f\d]{4}(?:[a-f\d]{4}-){4}[a-f\d]{12}$ |
例如:94f9d45a-71b0-4b3c-b69d-20c4bc9c8fdd |
| 16進制 | ^[A-Fa-f0-9]+$ |
例如:FFFFFF |
| 16進制顏色 | ^#?([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$ |
例如:#FFFFFF |
| SQL陳述句 | ^(?:select|drop|delete|create|update|insert).*$ |
|
| Java包名 | ^(?:[a-zA-Z_]\w*)+(?:[.][a-zA-Z_]\w*)+$ |
例如:com.r2coding.controller |
| 檔案擴展名 | \.(?:doc|pdf|txt) |
可按需增刪擴展名集合 |
| Windows檔案路徑 | ^[a-zA-Z]:(?:\\[\w\u4E00-\u9FA5\s]+)+[.\w\u4E00-\u9FA5\s]+$ |
例如:C:\Users\Administrator\Desktop\a.txt |
| Windows檔案夾路徑 | ^[a-zA-Z]:(?:\\[\w\u4E00-\u9FA5\s]+)+$ |
例如:C:\Users\Administrator\Desktop |
| Linux檔案路徑 | ^\/(?:[^/]+\/)*[^/]+$ |
例如:/root/library/a.txt |
| Linux檔案夾路徑 | ^\/(?:[^/]+\/)*$ |
例如:/root/library/ |
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/501746.html
標籤:其他
下一篇:實作一個會動的鴻蒙 LOGO

