一、創(chuàng)建一個正則表達式
你可以使用以下兩種方法構(gòu)建一個正則表達式:
1.1 使用一個正則表達式字面量
其由包含在斜杠之間的模式組成,如下所示:
const re = /ab+c/;
腳本加載后,正則表達式字面量就會被編譯。當(dāng)正則表達式保持不變時,使用此方法可獲得更好的性能。
1.2 調(diào)用RegExp對象的構(gòu)造函數(shù)
如下所示:
let re = new RegExp("ab+c");
在腳本運行過程中,用構(gòu)造函數(shù)創(chuàng)建的正則表達式會被編譯。如果正則表達式將會改變,或者它將會從用戶輸入等來源中動態(tài)地產(chǎn)生,就需要使用構(gòu)造函數(shù)來創(chuàng)建正則表達式。
二、編寫一個正則表達式的模式
2.1 使用簡單模式
簡單模式是由你想直接找到的字符構(gòu)成。
比如:
/abc/ 這個模式就能且僅能匹配 "abc" 字符按照順序同時出現(xiàn)的情況。
在"Hi, do you know your abc's?" 和 "The latest airplane designs evolved from slabcraft."中會匹配成功。
上述兩個例子中,匹配的子字符串是 "abc"。但是在 "Grab crab" 中會匹配失敗,因為它雖然包含子字符串 "ab c",但并不是準確的 "abc"。
2.2 使用特殊字符
當(dāng)你需要匹配一個不確定的字符串時,比如尋找一個或多個 "b",或者尋找空格,可以在模式中使用特殊字符。
比如:
你可以使用 /abc/ 去匹配一個單獨的 "a" 后面跟了零個或者多個 "b",同時后面跟著 "c" 的字符串,的意思是前一項出現(xiàn)零次或者多次。
在字符串 "cbbabbbbcdebc" 中,這個模式匹配了子字符串 "abbbbc"。
1.常用元字符
| 表達式 | 可匹配 |
|---|---|
| \d | 任意一個數(shù)字,0~9 中的任意一個 |
| \w | 任意一個字母或數(shù)字或下劃線,也就是 A-Z,a-z,0~9,_ 中任意一個 |
| \s | 包括空格、制表符、換頁符等空白字符的其中任意一個 |
| . | 小數(shù)點可以匹配除了換行符(\n)以外的任意一個字符 |
| \b | 匹配單詞(起始位置必須是各種空白符)的開始或結(jié)束 |
| ^ | 匹配字符串的開始 |
| $ | 匹配字符串的結(jié)束 |
2.常用的限定符
| 表達式 | 說明 |
|---|---|
| * | 重復(fù)零次或更多次 |
| + | 重復(fù)一次或更多次 |
| ? | 重復(fù)零次或一次 |
| {n} | 重復(fù)n次 |
| {n,} | 重復(fù)n次或更多次 |
| {n,m} | 重復(fù)n次或m次 |
三、使用正則表達式
| 方法 | 描述 |
|---|---|
| exec | 一個在字符串中執(zhí)行查找匹配的 RegExp 方法,它返回一個數(shù)組(未匹配到則返回 null)。 |
| test | 一個在字符串中測試是否匹配的 RegExp 方法,它返回 true 或 false。 |
| match | 一個在字符串中執(zhí)行查找匹配的 String 方法,它返回一個數(shù)組,在未匹配到時會返回 null。 |
| matchAll | 一個在字符串中執(zhí)行查找所有匹配的 String 方法,它返回一個迭代器(iterator)。 |
| search | 一個在字符串中測試匹配的 String 方法,它返回匹配到的位置索引,或者在失敗時返回 -1。 |
| replace | 一個在字符串中執(zhí)行查找匹配的 String 方法,并且使用替換字符串替換掉匹配到的子字符串。 |
| split | 一個使用正則表達式或者一個固定字符串分隔一個字符串,并將分隔后的子字符串存儲到數(shù)組中的 String 方法。 |
以exec為例:
const regex = /d(b+)d/g;
const regArray = regex.exec("cdbbdbsbz");
如果你不需要訪問正則表達式的屬性,這個腳本通過另一個方法來創(chuàng)建 myArray:
const regArray = /d(b+)d/g.exec("cdbbdbsbz");
// 和 "cdbbdbsbz".match(/d(b+)d/g); 相似。
// 但是 "cdbbdbsbz".match(/d(b+)d/g) 輸出數(shù)組 [ "dbbd" ],
// 而 /d(b+)d/g.exec('cdbbdbsbz') 輸出數(shù)組 [ "dbbd", "bb", index: 1, input: "cdbbdbsbz" ].
如果你想通過一個字符串構(gòu)建正則表達式,那么這個腳本還有另一種方法:
const regex = new RegExp("d(b+)d", "g");
const regArray = regex.exec("cdbbdbsbz");
四、常用正則合集
1、校驗合法url
/^(https?|ftp):\/\/([a-zA-Z0-9.-]+(:[a-zA-Z0-9.&%$-]+)*@)*((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}|([a-zA-Z0-9-]+\.)*[a-zA-Z0-9-]+\.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(:[0-9]+)*(\/($|[a-zA-Z0-9.,?'\\+&%$#=~_-]+))*$/
2、校驗手機號碼
/^(13[0-9]|14[579]|15[0-3,5-9]|16[6]|17[0135678]|18[0-9]|19[289])\d{8}$/
3、校驗國內(nèi)座機電話
/\d{3}-\d{8}|\d{4}-\d{7}/
4、校驗身份證
/(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/
5、校驗車牌號
/^(([京津滬渝冀豫云遼黑湘皖魯新蘇浙贛鄂桂甘晉蒙陜吉閩貴粵青藏川寧瓊使領(lǐng)][A-Z](([0-9]{5}[DF])|([DF]([A-HJ-NP-Z0-9])[0-9]{4})))|([京津滬渝冀豫云遼黑湘皖魯新蘇浙贛鄂桂甘晉蒙陜吉閩貴粵青藏川寧瓊使領(lǐng)][A-Z][A-HJ-NP-Z0-9]{4}[A-HJ-NP-Z0-9掛學(xué)警港澳使領(lǐng)]))$/
6、校驗email地址
/^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/
7、檢驗賬號名稱(只能由字母、數(shù)字、下劃線組成,且以字母開頭,8-20位)
/^[a-zA-Z][a-zA-Z0-9_]*{8,20}$/
8、檢驗密碼(8-20位含字母、數(shù)字的密碼)
/^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d]{8,20}$/
9、純字母
/^[a-zA-Z]*$/
10、純中文
/^[\u4E00-\u9FA5]/
11、整數(shù)
/^-?\d+$/
12、整數(shù)且大于0
/^([1-9]\d*(\.\d+)?|0)$/
13、小數(shù)
/^\d+\.\d+$/
14、正整數(shù)、小數(shù)或0
/^\d+(\.?|(\.\d+)?)$/
15、上傳圖片類型
/image\/(png|jpg|jpeg|gif)$/
16、域名
/[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(/.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+/.?/
17、qq號
/^[1-9]*[1-9][0-9]*$/
18、微信號
/^[a-zA-Z]([-_a-zA-Z0-9]{5,19})+$/
19、ipv4地址
/^(?:(?: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]?)$/
20、日期格式,yyyy-mm-dd
/^\d{4}(-)\d{1,2}\1\d{1,2}$/
驗證昵稱是否為中文、英文、數(shù)字或者下劃線,且長度為1到10。
const regex = /^([\u4E00-\uFA29]|[\uE7C7-\uE7F3]|[a-zA-Z0-9_]){1,10}$/;
regex.test('xdsfsf是否fs')
參考鏈接: