不懒不贪非正则

179 阅读2分钟

对于正则这个规则,给我的第一印象就是写的这是个啥???好长啊,当不断的深入研究的时候,果不其然,丑陋的外表下内在也很不友好,还很懒而且很贪婪。言归正传,话是这么说,合适的人做合适的事情,但是基于正则的这俩大属性,作用也是非常大,专门对付的就是字符串。总结一下。

regular expression

正则在JavaScript中属于正则对象,是引用数据类型EegExp,用来处理字符串的一种规则,用来匹配(test)捕获(exec) 想要的字符串信息,匹配和捕获是在RegExp.prototype上的方法。在实际开发中作用很大,常见的比如:用户登录注册时的校验...

创建正则

正则由俩部分组成,第一部分为元字符,第二部分为修饰符

  • 构造函数
let reg = new RegExp("\\d+");//注意:\在字符串中不起作用,所以得用斜杠来转义
  • 正则表达式
let reg = /^[\u4E00-\u9FA5]{2,5}(·[\u4E00-\u9FA5]{2,10}){0,2}$/;

正则俩大属性

懒惰性:正则每次捕获和匹配,都是从头开始,原因在于每次操作完,把reg.lastIndex设置为0,在下一次进行操作的时候就从当前索引为0处开始。reg.lastIndex记录了下一次匹配索引的开始位置。

解决办法:加全局修饰符g

贪婪性:正则会按照当前匹配的最长的长度来获取。

解决办法:加?

正则分组

  • 改变优先级
  • 实现分组捕获 第一项:大正则匹配的结果,其余项:每一个小分组单独匹配捕获的结果。如果设置了分组(改变优先级),但是捕获的时候不需要单独捕获,可以基于?:来处理
  • 分组引用: 分组引用就是通过\数字其代表对应分组出现一模一样的内容,从左到右依次是分组的的索引。

正则表达式 ?的含义

  • 本身就是量词元字符:代表出现0-1次
  • 取消正则捕获的贪婪性:放到量词元字符的后面,按照当前的最短的结果捕获
  • 在分组中的作用:让当前分组只匹配不捕获;
  • ?=:正向预查 表示必须有
  • ?!:负向预查 表示除了