资讯专栏INFORMATION COLUMN

正则表达式应用

junbaor / 642人阅读

摘要:应用场景正则表达式的应用场景有很多,一般是用来验证字符串,提取字符串和替换字符串。所以我们尝试着用正则表达式来解决一下。两个正则表达式为但是同事告诉我只能用一个表达式做出来,那么就要使用到之前所说的零宽度反向预查了。

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

应用场景

正则表达式的应用场景有很多,一般是用来验证字符串,提取字符串和替换字符串。

给一个字符串,把字符串里面的链接、数字、电话等显示不同的颜色;

给一个包含自定义表情的文字,找出里面的表情,替换成本地的表情图片;或者一个字符串进行替换

根据用户的输入内容,判断是否是微信号、手机号、邮箱、纯数字等

我在工作当中遇到的例子有好几个,贴出来让大家参考一下:

例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后面一定不为题目要求的数字,零宽度反向预查和一样虽然会限定匹配内容,但实际上是不会匹配到任何内容的。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/99686.html

相关文章

  • 正则达式的规则及应用

    摘要:第三阶段常见对象的学习正则表达式一正则表达式概述简单概述就是符合一定规则的字符串常见规则字符字符。举例表示字符反斜线字符。 第三阶段 JAVA常见对象的学习 正则表达式 (一) 正则表达式概述 (1) 简单概述 就是符合一定规则的字符串、 (2) 常见规则 A:字符 x 字符 x。举例:a表示字符a 反斜线字符。 新行(换行)符 (u000A) 回车符 (u000D) ...

    jzzlee 评论0 收藏0
  • JavaScript标准库系列——RegExp对象(三)

    摘要:目录导语理解正则表达式模式的规则字符串和正则实例的属性和方法检索实例小结导语正则表达式是处理字符串的一门艺术手法,应用场景经常出现在表单验证部分高级程序设计一书开篇提到,这门语言最原始的应用就是处理输入验证操作,所以正则表达式从诞生那一刻就 目录 导语 1.理解正则表达式 2.模式的规则 3.字符串和正则实例的属性和方法 4.检索实例 5. 小结 导语 正则表达式是处理字符串的一门艺...

    邱勇 评论0 收藏0
  • 正则达式 (一)

    摘要:介绍正则表达式入门匹配单个字符什么是正则表达式正则表达式,简称是一种工具。这份表单用来收集用户信息,其中包括电话号码邮箱地址等,你需要检验这些信息是否符合正确的语法格式。是一个正则表达式。 介绍 正则表达式入门 匹配单个字符 什么是正则表达式? 正则表达式(Regular Expression,简称regex)是一种工具。和其他工具一样,是为了解决某一类问题而发明的。学习一种工具的...

    graf 评论0 收藏0
  • JS正则达式一条龙讲解,从原理和语法到JS正则、ES6正则扩展,最后再到正则实践思路

    摘要:控制权和传动这两个词可能在搜一些博文或者资料的时候会遇到,这里做一个解释先控制权是指哪一个正则子表达式可能为一个普通字符元字符或元字符序列组成在匹配字符串,那么控制权就在哪。 温馨提示:文章很长很长,保持耐心,必要时可以跳着看,当然用来查也是不错的。 正则啊,就像一座灯塔,当你在字符串的海洋不知所措的时候,总能给你一点思路;正则啊,就像一台验钞机,在你不知道用户提交的钞票真假的时候,...

    Michael_Lin 评论0 收藏0
  • 第6章:可维护性软件构建方法 6.3可维护性构建技术

    摘要:遵循特定规则,利用操作符,终止节点和其他非终止节点,构造新的字符串非终结符是表示字符串的树的内部节点。语法中的生产具有这种形式非终结符终结,非终结符和运算符的表达式语法的非终结点之一被指定为根。 大纲 基于状态的构建 基于自动机的编程 设计模式:Memento提供了将对象恢复到之前状态的功能(撤消)。 设计模式:状态允许对象在其内部状态改变时改变其行为。 表驱动结构* 基于语法的构...

    young.li 评论0 收藏0

发表评论

0条评论

junbaor

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<