上一篇文章跟你們介紹了正則表達式的一些常見知識點和相關例子,那這篇文章我就來分享一下本身在工做當中所遇到的跟正則表達式有關的運用案例,看看它在個人工做中發揮了怎樣的做用。javascript
正則表達式的應用場景有不少,通常是用來驗證字符串,提取字符串和替換字符串。java
我在工做當中遇到的例子有好幾個,貼出來讓你們參考一下:正則表達式
解析
:微信
銀行卡的位數實際是不固定的,若是按照字符串替換的方式的話,就要對銀行卡的位數進行判斷,而後再進行替換,須要作屢次if-else判斷,這樣代碼其實是很是臃腫難看的。code
因此咱們嘗試着用正則表達式來解決一下。圖片
先來看銀行卡的規律,銀行卡數字在15~19之間,第一個數字不能是0,在這裏咱們要對倒數第4位前面的4位數進行替換,必然要使用到分組。按照正則裏面分組的知識點,分組從左到右依次是組1,組2,組3,依次類推,好比組1,能夠用1或者$1來表示。ip
來看具體代碼:字符串
let reg8 = /^([1-9]{1}\d{6,10})\d{4}(\d{4})$/ let str8a = '370248145284512' //15 let str8b = '3702481452845125' //16 let str8c = '3702481452845125832' //19 console.log('---------銀行卡號-----------') console.log(str8a.replace(reg8,`$1****$2`)) // 3702481****4512 console.log(str8b.replace(reg8,`$1****$2`)) // 37024814****5125 console.log(str8c.replace(reg8,`$1****$2`)) // 37024814528****5832
解析
:console
時間的判斷是很是常見的,上一篇文章當中咱們講述捕獲分組和非捕獲分組時聊到了時間的判斷,如今咱們來看看簡化版的時間的判斷。class
小時是0-23小時,分和秒都是0-59,根據它們的規律咱們可使用分組和修飾符來找到全文的時間。
具體代碼:
let reg = /((2[0-3])|([0-1]\d))(:[0-5]\d){2}/g let str = '如今的時間是12:23:44,下一刻應該是12:55:22,但毫不是24:13:34' console.log(str.match(reg)) // ["12:23:44", "12:55:22"]
選出8**0,9**0,同時不包含8200, 8310, 8520, 8440, 8320, 8100, 8920, 8800, 8180, 8010, 8480, 8150
解析
:
這個是同事的一個需求,開始個人想法是寫兩個正則表達式,一個將8**0,9**0的數字選出來,一個將不包含的數字選出來,而後從前面的數字當中剔除掉後面的那些數字。
兩個正則表達式爲:
re1 = /[8-9]\\d{2}0/g
reg2 = /8(200|310|520|440|320|100|920|800|180|010|480|150)/g
可是同事告訴我只能用一個表達式作出來,那麼就要使用到以前所說的零寬度反向預查了。已知第一個數字後面必定不爲200,那麼使用零寬度反向預查來進行篩選。
let str9 = '8200, 8310, 8520, 8440, 8320, 8100, 8920, 8800, 8180, 8010, 8480, 8150, 3434,545656,8544,6554,8900,9330,9120,8333,8200,9200' let reg9 = /(8(?!(200|310|520|440|320|100|920|800|180|010|480|150))\d{2}0)|(9\d{2}0)/g console.log(str9.match(reg9)) // ["8900", "9330", "9120", "9200"]
這個表達式第一個數字是8或者9,分別進行判斷,8後面必定不爲題目要求的數字,零寬度反向預查和\b
同樣雖然會限定匹配內容,但其實是不會匹配到任何內容的。