正则表达式应用

上一篇文章跟你们介绍了正则表达式的一些常见知识点和相关例子,那这篇文章我就来分享一下本身在工做当中所遇到的跟正则表达式有关的运用案例,看看它在个人工做中发挥了怎样的做用。javascript

应用场景

正则表达式的应用场景有不少,通常是用来验证字符串,提取字符串和替换字符串。java

  1. 给一个字符串,把字符串里面的连接、数字、电话等显示不一样的颜色;
  2. 给一个包含自定义表情的文字,找出里面的表情,替换成本地的表情图片;或者一个字符串进行替换
  3. 根据用户的输入内容,判断是不是微信号、手机号、邮箱、纯数字等

我在工做当中遇到的例子有好几个,贴出来让你们参考一下:正则表达式

例1:将银行卡号的倒数第四位以前的四个数字变成*

解析微信

银行卡的位数实际是不固定的,若是按照字符串替换的方式的话,就要对银行卡的位数进行判断,而后再进行替换,须要作屡次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"]

例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)|(9\d{2}0)/g
console.log(str9.match(reg9)) // ["8900", "9330", "9120", "9200"]

这个表达式第一个数字是8或者9,分别进行判断,8后面必定不为题目要求的数字,零宽度反向预查和\b同样虽然会限定匹配内容,但其实是不会匹配到任何内容的。

相关文章
相关标签/搜索