正则简单的应用

正则表达式

正则表达式,是我们日常开发中经常会运用到的。当然对于一些复杂的正则表达式,当然可以通过网络去搜索可以节约时间;对于运用到的一些简单的,自己动手去写可以节约一些时间,也是自己技术能力体现。对于正则的基础知识我这里就不做介绍了,要想了解基础知识,可以去翻阅菜鸟教程它的表达会比写的更加清楚,我主要给大家介绍如何写一段性能比较好的正则表达式,也就是优雅的写一段正则表达式,也是我们日常工作经常会用的。
  • 在这里我分为两中一是斜杠匹配式,二是对象匹配式:
    1. 斜杠匹配(/^]$/):
    2. 对象正则:通过new一个正则对象new RegExp()
  • 其实大家心里有个疑问,那就是正则的数据类型是什么呢,其实我心里也很好奇,我一起通过代码来实现吧:
```
typeof  /[0-9]/ 
结果:"object"
type new RegExp('\s+', 'g')
结果:“object”

```

结论:通过上述代码我可以知道正则表达式属于引用类型,引用类型,我们都知道他是存放在堆内存里,有关详细关于内存管理的内容,会在接下来的博客进行介绍。
一:正则相关概念:

  • 元字符:\w(字母数字下划线), \W(非字母数字下划线),.(所有), * (0或多次),+(一次或多次), ?(0或1次), \n\r(换行回车) , \b\B(单词边界,非单词边界),\s\S\d\Detc.
  • 语法:普通正则,动态正则,分组匹配
    • 普通正则:/\s+/g全局匹配空格
    • 动态正则:
        var str = 'ne2'
         var n = /^[a-zA-Z0-9]+/
         var reg = new RegExp(n)//可以动态创建表达式;
         console.log( reg.test(str)) //true
    
  • 分组匹配
	  var str = 'ne2'
	   var n = /(^[a-zA-Z]+)(\d+$)/g
	   var reg = new RegExp(n)//可以动态创建表达式;
	   reg.test(str)
	   console.log(RegExp.$1, RegExp.$2) // ne 2

二: 日常工作中会运用到正则方法:

  • test()正则检测
  • replace()正则替换
  • split() 正则切割
    上面两种方法是我们工作可能经常会用的两个方法
    当然还有其他方法:match/exec/search
    其实我给出上面六种方法中:test和exec是RegExp.prototype的原型方法,而其他四种则是正则原型的Symbol函数里的方法,这种是无法直接通过RegExp.prototype.relace进行获取的。有关symbol方法的理解也会放到后面章节去写。
  • 屌丝们看图:
    在这里插入图片描述
    1. test()是属于正则方法,可以通过RegExp.prototype.test获取方法;
const reg = /^\d+$/g
const value = 123213
console.log(reg.test(value))//true

上面就检测是否是数字类型;
开发会用到的正则校验:

  • 手机号:/^1[34578]\d{9}$/g 注:这个主要针对国内手机号用户进行判断,如果涉及到国际业务,可以采用该插件libphonenumber-js(github库链接)
  • 邮箱: /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/
  • 微信号:/^[a-zA-Z-]([-_a-zA-Z0-9]{5,19})+$/
  • url:/^(https?:\/\/)?[a-zA-Z-_]+\.?[a-zA-Z0-9-_]*\.[a-zA-Z_-]+/g可以根据业务需求去修改
  • 正整数/^[1-9]\d*$/
  • 用户名:/^\w{4,16}/g 用户名4到16位(数字,字母,下划线,减号)
  • 中文校验:/[\u4E00-\u9FA5]/g

2. replace()这个方法可进行正则替换
relace这个应用还是比较广泛;

  • 替换空字符串:
      var str = 'scott nue jie typr kf ytr kfljei 126' 
	  var reg = new RegExp(/\s+/,'g')
	  str = str.replace(reg,' ')
	  console.log(str)// scottnuejietyprkfytrkfljei126
  • 手机号加密:
 replace(/(^\d{3})(\d{4})(\d{4}$)/g, "$1****$3")
  • 文本加密算法
 function textEncryption(text, targetStr, digit){
		targetStr = targetStr || '*';
		digit = digit || 4;
		text = text + '';
		var newTargetString = ''
		for(var i = 0;i<digit;i++){
			newTargetString += targetStr;
		}
		var len = text.length;
		var baseNumber = (len-digit)/2
		var firstNumber = Math.floor(baseNumber);
		var lastNumber = Math.ceil(baseNumber);
		var reg = new RegExp(`(^.{${firstNumber}})(.{${digit}})(.{${lastNumber}}$)`, 'g');
		return text.replace(reg, `$1${newTargetString}$3`);
	 }
  • replace(a,b),a,表示父级需要匹配替换的参数(正则|string), b,替换的类型,代码如上;
  • replace(a,function(res,index){});
    a,表示父级需要匹配替换的参数(正则|string);
    res,表示正则匹配的字符
    index,正则匹配字符下标
	 var str = 'fhdsfj ksjdflkj jklsdjflk'
	 str =  str.replace(/j/g,function(res,index){
	  	console.log(res)
	  	console.log(index)
		return '文'+res
	  	
	  })
	 console.log(str)

在这里插入图片描述
参考文档

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值