正则

0 篇文章 0 订阅

1.正则是什么

正则是一个用来处理字符串的规则

  • 正则只能用来处理字符串

  • 处理一般包含两方面

      1. 验证当前字符串是否符合某个规则正则匹配

      2. 把一个字符串中符合规则的字符获取到正则捕获

2.正则的组成部分

每一个正则都是有修饰元字符,修饰符两部分组成

  • 正则两个斜杠之间包起来的都是元字符,斜杠后面出现的都是修饰符

 let reg=/^\d+$/g;

3.正则的两种创建方式

  • 字面量方式

 let reg=/^\d+$/g;//=>字面量方式
  • 构造函数方式

 let reg=new RegExp("\\d+$","g");//=>构造函数方式

4.常用修饰符

  • i:ignoreCase,忽略大小写匹配

  • m:multiline,多行匹配

  • g:global,全局匹配

5.常用元字符

5.1.特殊元字符

  • \d:0~9之间的一个数字

  • \D:非0~9之间的任意字符

  • \w数字,字母,下划线中的任意一个=>/[0-9a-zA-Z_]/等价于\w

  • \s:匹配任意一个空白字符(包括\t制表符[TAB键四个空格])

  • \b:匹配边界符,如:"zhang"(z左边和g右边就是边界),“zhang-san”(z左边,g右边,s左边,n右边就是边界)

  • \n:匹配一个换行符

  • \:转义字符(把一个普通字符转义为特殊的字符,例如:\d,把有特殊含义的转义为普通意思,例如:\.此处的点就不是任意字符,而是一个小数点)

  • .:除了\n以外的任意字符

  • ^:以某个元字符开头

  • $:以某个元字符结尾

  • x|y:x或y中的任意一个(a|z...)

  • [xyz]:x或y或z中的任意一个

  • [^xyz]:除了x,y,z以外的任意字符

  • [a-z]:获取a-z中的任意一个字符([0-9]等价于\d)

  • [^a-z]:除了a-z的任意字符

  • ():正则分组

  • (?:):当前分组只匹配不捕获

  • (?=):正向预查

  • (?!):负向预查

5.2.量词元字符:让其左边元字符出现多少次

  • *:出现零到多次

  • ?:出现零到一次

  • +:出现一到多次

  • {n}:出现n次

  • {n,}:出现n到多次

  • {n,m}:出现n到m次

5.3.普通元字符

只要在正则中出现的元字符(在基于字面方式创建),除了特殊和有量词意义的以外,其余的都是普通元字符

6.中括号

[xyz]

[^xyz]

[a-z]

[^a-z]

  • 中括号中出现的元字符一般都是代表本身的含义

  • 中括号中出现的两位数,不是两位数,而是两个数字中的任意一个

只能是xxx

 //=>只能是xxx, "."代表处理/n以外的任意字符,"+"一到多次
 let reg=/^.+$/
 console.log(reg.test('aa'));//=>true
 console.log(reg.test('b'));//=>true
 console.log(reg.test('\n'));//=>false

出现一到多个"."

 //=>出现一到多个"." ,中括号包起来的点代表自己本意就是点
 let reg=/^[.]+$/
 console.log(reg.test('aa'));//=>false
 console.log(reg.test('b'));//=>false
 console.log(reg.test('\n'));//=>false
 console.log(reg.test('.'));//=>true
 console.log(reg.test('..'));//=>true

0~9中的任意字符

 //=>0~9中的任意字符,"\d"这里依然带边0~9的一个数字
 let reg=/^[\d]$/;
 console.log(reg.test('0'));//=>true
 console.log(reg.test('d'));//=>false

以1开始与结束或者以8开始与结束

 //=>以1开始与结束或者以8开始与结束,中括号中两位数,不是两位数,而是两位数中的任意一个
 let reg=/^[18]$/;
 console.log(reg.test('1'));//=>true
 console.log(reg.test('8'));//=>true
 console.log(reg.test('18'));//=>false
 console.log(reg.test('11'));//=>false
 console.log(reg.test('88'));//=>false

1或者2~6或者5中的一个

 //=>1或者2~6或者5中的一个
 let reg=/^[12-65]$/;
 console.log(reg.test('1'));//=>true
 console.log(reg.test('2'));//=>true
 console.log(reg.test('6'));//=>true
 console.log(reg.test('5'));//=>true
 console.log(reg.test('4'));//=>true
 console.log(reg.test('44'));//=>false
 console.log(reg.test('7'));//=>false

案例:

年龄:18~65之间

 /*
  * 18~19  (1[89])
  * 20~59  ([2-5]\d)
  * 60~65  (6[0-5])
  */
 let reg=/^((1[89])|([2-5]\d)|(6[0-5]))$/

 

编写一个规则,匹配 "[object AAA]"

 //编写一个规则,匹配 "[object AAA]"
 let reg=/^\[object .+\]$/

7.分组

  • 改变默认的优先级

  • 分组捕获

  • 分组引用

18或者19

 //=>18或者19
 let reg=/^(18|19)$/
 console.log(reg.test(18));//=>true
 console.log(reg.test(19));//=>true
 console.log(reg.test(89));//=>false
 console.log(reg.test(81));//=>false
 console.log(reg.test(181));//=>false

正则中出现的\1代表和第一个分组出现一模一样的内容...

 //=>正则中出现的\1代表和第一个分组出现一模一样的内容...
 let reg=/^([a-z])([a-z])\2\1$/;
 console.log(reg.test('oppo'));//=>true
 console.log(reg.test('popo'));//=>false

编写一个正则匹配身份证号码

 /**
  * '130828199012040617'
  * 前六位:130828 地区
  * 中间8位:1990120 出生年月日
  * 最后4位:0617  =>倒数第二位:奇数=男  偶数=女
  */
 //=>只能匹配是否符合格式,不能提取出身份证中的一些信息
 // let reg=/^\d{17}(\d|X)$/
 ​
 //=>EXEC实现的是正则捕获,获取的结果是一个数组,如果不匹配获取的结果是null,
 //=>捕获的时候不仅把大正则匹配的信息捕获到,而且每一个小分组中的内容也捕获到了(分组捕获) : 
 //=>["130828199012040617", "130828", "1990", "12", "04", "1", index: 0, input: "130828199012040617"]
 let reg=/^(\d{6})(\d{4})(\d{2})(\d{2})\d{2}(\d)(?:\d|X)$/

8.正则捕获

正则捕获使用的是正则中的exec()方法

  • 如果可以匹配获取的结果是一个数组,如果不能匹配获取的结果是null

  • 如果我们只在匹配的时候,想要获取大正则中部分信息,我们可以把这部分使用小括号包起来,形成一个分组,这样在捕获的时候,不仅可以把大正则匹配的信息捕获到,而且还单独的把小分组匹配的部分信息也捕获到了(分组捕获)

  • 有时候写小分组不是为了捕获信息,只是为了改变优先级或者进行分组引用,此时我们可以在分组的前面加上?:,代表只去匹配,但是不把这个分组内容捕获

9.案例

有效数字

 /**
  * 有效数字
   1.正数 负数 零
   2.小数 整数
 ​
   分析规则:
   1.可以出现+/-号:可以没有,也可以有一个
   2.整数 0 12 9 : 一位或者多位数字,一位0~9,多位数字不能以0开头
   3.小数部分:可能有可能没有,有小数点后面至少要跟一位数字
  */
 let reg=/^(+|-)?([1-9]\d+)(\.\d+)?$/

电话(手机)号码

 /**
  * 电话(手机)号码
   1. 11位数字
   2. 以1开头
  */
 let reg=/^1\d{10}$/

中文姓名

 /*
  * 中文姓名
  *   1. 中文汉字  [\u4E00-\u9FA5]
  *   2. 尼古拉斯·赵四
  */
 let reg=/^([\u4E00-\u9FA5]){2,}(·[\u4E00-\u9FA5]{2,})?$/

邮箱

 /*
  * 邮箱
  *   xxxx@xxx.xx.xx
  *
  *  第一部分:数字、字母、下划线、-、.,但是-和.不能作为开头,不能连续出现-或者.
  *
  *  第二部分:xxx.xx.xx  xxx.xx  xxx.xx.xx.xx  xxx-xxx-xx.xx.xx
  *
  */
 ​
 let reg=/^\w+([-.]\w+)*@[A-Za-z0-9]+([-.][A-Za-z0-9]+)*(\.[A-Za-z0-9]+)$/

【珠峰笔录】

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值