通過(guò)案例學(xué)習(xí)正則表達(dá)式

我們知道js是支持正則表達(dá)式的,用正則表達(dá)式來(lái)驗(yàn)證文本非常方便,但是初學(xué)者卻非常難懂,最近碰到幾個(gè)要用正則的地方,實(shí)在是逃不過(guò)了就去學(xué)了學(xué),發(fā)現(xiàn)邊寫(xiě)邊學(xué)其實(shí)也并不是太難。下面通過(guò)一個(gè)案例來(lái)學(xué)習(xí)

ps:安利兩個(gè)網(wǎng)站正則可視化 正則檢測(cè) 下面講用法

先看需求:匹配美國(guó)電話號(hào)碼

//正確格式
555-555-5555
(555)555-5555
(555) 555-5555
555 555 5555
5555555555
1 555 555 5555

首先會(huì)想到匹配數(shù)字,發(fā)現(xiàn)正則數(shù)字可以用\d表示,那么\d\d\d-\d\d\d-\d\d\d\d是不是可以匹配第一種類(lèi)型呢,來(lái)用這個(gè)網(wǎng)站檢測(cè)一下,可以看到第一個(gè)確實(shí)被匹配到了,后面/g是全文匹配

但是缺點(diǎn)顯而易見(jiàn),重復(fù)的怎么簡(jiǎn)寫(xiě)呢?原來(lái){n}可以表示重復(fù)次數(shù),那么改一下


Bingo!,那么接下來(lái)注意到第一個(gè),第四個(gè)是不是比較相同呢?空格或者橫線,那么怎么表示或者關(guān)系呢?來(lái)看看這個(gè),框起來(lái)的是更改的地方

沒(méi)錯(cuò)[]表示或者的關(guān)系,\s表示空格。來(lái)用可視化看一下


意思就是3個(gè)數(shù)字,接著匹配空格或則橫線,再3個(gè)數(shù)字,再空格或則橫線,最后4個(gè)數(shù)字,這樣應(yīng)該很好理解了

可能會(huì)注意到222 555 555 5555這樣不符合預(yù)期的也匹配到了,原來(lái)我們是想從頭開(kāi)始驗(yàn)證,那么可以這樣做

^表示從頭開(kāi)始匹配,注意到后面加了/gm,因?yàn)榧恿藦念^匹配的話,回車(chē)換行下一行并不會(huì)被認(rèn)為新的開(kāi)始,所以/m表示多行匹配
然后看5555555555空格和橫線也可以不要,那么意思就是空格或橫線可以出現(xiàn)或者不出現(xiàn),那么可以這樣改一下


注意我加了一個(gè)?,它表示最多出現(xiàn)一次(可以是0次)這樣就可以匹配全是數(shù)字這樣的情況了,舉一反三,那么開(kāi)始的區(qū)號(hào)1 555 555 5555中的1和空格是不是也可以這樣表示呢?

注意我()括起來(lái)了,它表示一組
接下來(lái)處理括號(hào),既然也是可有可無(wú),也用?表示算了


注意框起來(lái)的地方我寫(xiě)的是\(\)這是因?yàn)?strong>要對(duì)特殊字符進(jìn)行轉(zhuǎn)義,學(xué)過(guò)js一定對(duì)轉(zhuǎn)義不陌生,這里就不細(xì)講了
到這里就完了嗎?不不不,還是太年輕,來(lái)看看這種情況


我們寫(xiě)的是括號(hào)兩邊都是最多出現(xiàn)一次,并沒(méi)有要求同時(shí)出現(xiàn)或者同時(shí)不出現(xiàn),這就面臨著只出現(xiàn)一半也會(huì)通過(guò)匹配的情況。。再改一下


這好像改的有點(diǎn)多。。

分步講,先看前面由(1\s)?改成了1?\s?因?yàn)闆](méi)改之前(1\s)是一組至多出現(xiàn)一次,所以1單獨(dú)出現(xiàn)的時(shí)候也會(huì)出現(xiàn)匹配失敗,所以還是分開(kāi)寫(xiě)了

再看第二個(gè)這一坨,放到可視化里面看

兩組之間的或者關(guān)系可以用()|()表示

最后一步,我加了$來(lái)表示結(jié)尾,停止匹配,不然的話555-555-5555555也是會(huì)被匹配成功的

大致就是這么多了,最后來(lái)完整看一遍代碼

/^1?\s?((\(\d{3}\))|(\d{3}))[\s-]?\d{3}[\s-]?\d{4}$/gm

放到可視化里面


常用的正則方法還有

[a-z]    //匹配a到z任意字符
.    //除回車(chē)換行外任意字符
+//最少出現(xiàn)一次
\d//數(shù)字
\D//非數(shù)字
\s//空格
\S//非空格
\w//單詞字符
\W//非單詞字符
{n}//出現(xiàn)n次
{n,m}//出現(xiàn)n到m次
{n,}//至少出現(xiàn)n次
\b//單詞邊界
\B//非單詞邊界
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容