一胡岔、創(chuàng)建一個正則表達(dá)式
你可以使用以下兩種方法構(gòu)建一個正則表達(dá)式:
1.1 使用一個正則表達(dá)式字面量
其由包含在斜杠之間的模式組成可训,如下所示:
const re = /ab+c/;
腳本加載后蟆豫,正則表達(dá)式字面量就會被編譯棍潘。當(dāng)正則表達(dá)式保持不變時(shí)裕偿,使用此方法可獲得更好的性能尊剔。
1.2 調(diào)用RegExp對象的構(gòu)造函數(shù)
如下所示:
let re = new RegExp("ab+c");
在腳本運(yùn)行過程中爪幻,用構(gòu)造函數(shù)創(chuàng)建的正則表達(dá)式會被編譯。如果正則表達(dá)式將會改變须误,或者它將會從用戶輸入等來源中動態(tài)地產(chǎn)生挨稿,就需要使用構(gòu)造函數(shù)來創(chuàng)建正則表達(dá)式。
二京痢、編寫一個正則表達(dá)式的模式
2.1 使用簡單模式
簡單模式是由你想直接找到的字符構(gòu)成奶甘。
比如:
/abc/ 這個模式就能且僅能匹配 "abc" 字符按照順序同時(shí)出現(xiàn)的情況。
在"Hi, do you know your abc's?" 和 "The latest airplane designs evolved from slabcraft."中會匹配成功祭椰。
上述兩個例子中甩十,匹配的子字符串是 "abc"船庇。但是在 "Grab crab" 中會匹配失敗,因?yàn)樗m然包含子字符串 "ab c"侣监,但并不是準(zhǔn)確的 "abc"鸭轮。
2.2 使用特殊字符
當(dāng)你需要匹配一個不確定的字符串時(shí),比如尋找一個或多個 "b"橄霉,或者尋找空格窃爷,可以在模式中使用特殊字符。
比如:
你可以使用 /abc/ 去匹配一個單獨(dú)的 "a" 后面跟了零個或者多個 "b"姓蜂,同時(shí)后面跟著 "c" 的字符串按厘,的意思是前一項(xiàng)出現(xiàn)零次或者多次。
在字符串 "cbbabbbbcdebc" 中钱慢,這個模式匹配了子字符串 "abbbbc"逮京。
1.常用元字符
表達(dá)式 | 可匹配 |
---|---|
\d | 任意一個數(shù)字,0~9 中的任意一個 |
\w | 任意一個字母或數(shù)字或下劃線束莫,也就是 A-Z,a-z,0~9,_ 中任意一個 |
\s | 包括空格懒棉、制表符、換頁符等空白字符的其中任意一個 |
. | 小數(shù)點(diǎn)可以匹配除了換行符(\n)以外的任意一個字符 |
\b | 匹配單詞(起始位置必須是各種空白符)的開始或結(jié)束 |
^ | 匹配字符串的開始 |
$ | 匹配字符串的結(jié)束 |
2.常用的限定符
表達(dá)式 | 說明 |
---|---|
* | 重復(fù)零次或更多次 |
+ | 重復(fù)一次或更多次 |
览绿? | 重復(fù)零次或一次 |
{n} | 重復(fù)n次 |
{n,} | 重復(fù)n次或更多次 |
{n,m} | 重復(fù)n次或m次 |
三策严、使用正則表達(dá)式
方法 | 描述 |
---|---|
exec | 一個在字符串中執(zhí)行查找匹配的 RegExp 方法,它返回一個數(shù)組(未匹配到則返回 null)饿敲。 |
test | 一個在字符串中測試是否匹配的 RegExp 方法妻导,它返回 true 或 false。 |
match | 一個在字符串中執(zhí)行查找匹配的 String 方法怀各,它返回一個數(shù)組倔韭,在未匹配到時(shí)會返回 null。 |
matchAll | 一個在字符串中執(zhí)行查找所有匹配的 String 方法瓢对,它返回一個迭代器(iterator)狐肢。 |
search | 一個在字符串中測試匹配的 String 方法,它返回匹配到的位置索引沥曹,或者在失敗時(shí)返回 -1份名。 |
replace | 一個在字符串中執(zhí)行查找匹配的 String 方法,并且使用替換字符串替換掉匹配到的子字符串妓美。 |
split | 一個使用正則表達(dá)式或者一個固定字符串分隔一個字符串僵腺,并將分隔后的子字符串存儲到數(shù)組中的 String 方法。 |
以exec為例:
const regex = /d(b+)d/g;
const regArray = regex.exec("cdbbdbsbz");
如果你不需要訪問正則表達(dá)式的屬性壶栋,這個腳本通過另一個方法來創(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)建正則表達(dá)式贵试,那么這個腳本還有另一種方法:
const regex = new RegExp("d(b+)d", "g");
const regArray = regex.exec("cdbbdbsbz");
四琉兜、常用正則合集
1凯正、校驗(yàn)合法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、校驗(yàn)手機(jī)號碼
/^(13[0-9]|14[579]|15[0-3,5-9]|16[6]|17[0135678]|18[0-9]|19[289])\d{8}$/
3豌蟋、校驗(yàn)國內(nèi)座機(jī)電話
/\d{3}-\d{8}|\d{4}-\d{7}/
4廊散、校驗(yàn)身份證
/(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/
5、校驗(yàn)車牌號
/^(([京津滬渝冀豫云遼黑湘皖魯新蘇浙贛鄂桂甘晉蒙陜吉閩貴粵青藏川寧瓊使領(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梧疲、校驗(yàn)email地址
/^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/
7允睹、檢驗(yàn)賬號名稱(只能由字母、數(shù)字幌氮、下劃線組成缭受,且以字母開頭,8-20位)
/^[a-zA-Z][a-zA-Z0-9_]*{8,20}$/
8该互、檢驗(yàn)密碼(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}$/
驗(yàn)證昵稱是否為中文、英文邀泉、數(shù)字或者下劃線嬉挡,且長度為1到10。
const regex = /^([\u4E00-\uFA29]|[\uE7C7-\uE7F3]|[a-zA-Z0-9_]){1,10}$/;
regex.test('xdsfsf是否fs')
參考鏈接: