摘要:應(yīng)用場景正則表達式的應(yīng)用場景有很多,一般是用來驗證字符串,提取字符串和替換字符串。所以我們嘗試著用正則表達式來解決一下。兩個正則表達式為但是同事告訴我只能用一個表達式做出來,那么就要使用到之前所說的零寬度反向預(yù)查了。
上一篇文章跟大家介紹了正則表達式的一些常見知識點和相關(guān)例子,那這篇文章我就來分享一下自己在工作當中所遇到的跟正則表達式有關(guān)的運用案例,看看它在我的工作中發(fā)揮了怎樣的作用。
應(yīng)用場景正則表達式的應(yīng)用場景有很多,一般是用來驗證字符串,提取字符串和替換字符串。
給一個字符串,把字符串里面的鏈接、數(shù)字、電話等顯示不同的顏色;
給一個包含自定義表情的文字,找出里面的表情,替換成本地的表情圖片;或者一個字符串進行替換
根據(jù)用戶的輸入內(nèi)容,判斷是否是微信號、手機號、郵箱、純數(shù)字等
我在工作當中遇到的例子有好幾個,貼出來讓大家參考一下:
例1:將銀行卡號的倒數(shù)第四位之前的四個數(shù)字變成*解析:
銀行卡的位數(shù)實際是不固定的,如果按照字符串替換的方式的話,就要對銀行卡的位數(shù)進行判斷,然后再進行替換,需要做多次if-else判斷,這樣代碼實際上是非常臃腫難看的。
所以我們嘗試著用正則表達式來解決一下。
先來看銀行卡的規(guī)律,銀行卡數(shù)字在15~19之間,第一個數(shù)字不能是0,在這里我們要對倒數(shù)第4位前面的4位數(shù)進行替換,必然要使用到分組。按照正則里面分組的知識點,分組從左到右依次是組1,組2,組3,依次類推,比如組1,可以用1或者$1來表示。
來看具體代碼:
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例二: 判斷文本當中的年月日
解析:
時間的判斷是非常常見的,上一篇文章當中我們講述捕獲分組和非捕獲分組時聊到了時間的判斷,現(xiàn)在我們來看看簡化版的時間的判斷。
小時是0-23小時,分和秒都是0-59,根據(jù)它們的規(guī)律我們可以使用分組和修飾符來找到全文的時間。
具體代碼:
let reg = /((2[0-3])|([0-1]d))(:[0-5]d){2}/g let str = "現(xiàn)在的時間是12:23:44,下一刻應(yīng)該是12:55:22,但絕不是24:13:34" console.log(str.match(reg)) // ["12:23:44", "12:55:22"]例3: 對選中部分數(shù)字進行篩選
選出8**0,9**0,同時不包含8200, 8310, 8520, 8440, 8320, 8100, 8920, 8800, 8180, 8010, 8480, 8150
解析:
這個是同事的一個需求,開始我的想法是寫兩個正則表達式,一個將8**0,9**0的數(shù)字選出來,一個將不包含的數(shù)字選出來,然后從前面的數(shù)字當中剔除掉后面的那些數(shù)字。
兩個正則表達式為:
re1 = /[8-9]d{2}0/g
reg2 = /8(200|310|520|440|320|100|920|800|180|010|480|150)/g
但是同事告訴我只能用一個表達式做出來,那么就要使用到之前所說的零寬度反向預(yù)查了。已知第一個數(shù)字后面一定不為200,那么使用零寬度反向預(yù)查來進行篩選。
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)|(9d{2}0)/g console.log(str9.match(reg9)) // ["8900", "9330", "9120", "9200"]
這個表達式第一個數(shù)字是8或者9,分別進行判斷,8后面一定不為題目要求的數(shù)字,零寬度反向預(yù)查和一樣雖然會限定匹配內(nèi)容,但實際上是不會匹配到任何內(nèi)容的。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/99686.html
摘要:第三階段常見對象的學(xué)習正則表達式一正則表達式概述簡單概述就是符合一定規(guī)則的字符串常見規(guī)則字符字符。舉例表示字符反斜線字符。 第三階段 JAVA常見對象的學(xué)習 正則表達式 (一) 正則表達式概述 (1) 簡單概述 就是符合一定規(guī)則的字符串、 (2) 常見規(guī)則 A:字符 x 字符 x。舉例:a表示字符a 反斜線字符。 新行(換行)符 (u000A) 回車符 (u000D) ...
摘要:目錄導(dǎo)語理解正則表達式模式的規(guī)則字符串和正則實例的屬性和方法檢索實例小結(jié)導(dǎo)語正則表達式是處理字符串的一門藝術(shù)手法,應(yīng)用場景經(jīng)常出現(xiàn)在表單驗證部分高級程序設(shè)計一書開篇提到,這門語言最原始的應(yīng)用就是處理輸入驗證操作,所以正則表達式從誕生那一刻就 目錄 導(dǎo)語 1.理解正則表達式 2.模式的規(guī)則 3.字符串和正則實例的屬性和方法 4.檢索實例 5. 小結(jié) 導(dǎo)語 正則表達式是處理字符串的一門藝...
摘要:控制權(quán)和傳動這兩個詞可能在搜一些博文或者資料的時候會遇到,這里做一個解釋先控制權(quán)是指哪一個正則子表達式可能為一個普通字符元字符或元字符序列組成在匹配字符串,那么控制權(quán)就在哪。 溫馨提示:文章很長很長,保持耐心,必要時可以跳著看,當然用來查也是不錯的。 正則啊,就像一座燈塔,當你在字符串的海洋不知所措的時候,總能給你一點思路;正則啊,就像一臺驗鈔機,在你不知道用戶提交的鈔票真假的時候,...
摘要:遵循特定規(guī)則,利用操作符,終止節(jié)點和其他非終止節(jié)點,構(gòu)造新的字符串非終結(jié)符是表示字符串的樹的內(nèi)部節(jié)點。語法中的生產(chǎn)具有這種形式非終結(jié)符終結(jié),非終結(jié)符和運算符的表達式語法的非終結(jié)點之一被指定為根。 大綱 基于狀態(tài)的構(gòu)建 基于自動機的編程 設(shè)計模式:Memento提供了將對象恢復(fù)到之前狀態(tài)的功能(撤消)。 設(shè)計模式:狀態(tài)允許對象在其內(nèi)部狀態(tài)改變時改變其行為。 表驅(qū)動結(jié)構(gòu)* 基于語法的構(gòu)...
閱讀 1809·2023-04-25 18:19
閱讀 2220·2021-10-26 09:48
閱讀 1302·2021-10-09 09:44
閱讀 1891·2021-09-09 11:35
閱讀 3162·2019-08-30 15:54
閱讀 2212·2019-08-30 11:26
閱讀 2416·2019-08-29 17:06
閱讀 1050·2019-08-29 16:38