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