正则表达式知识点——一篇就够

时间:2021-6-4 作者:qvyue

正则表达式是对字符串(包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为“元字符”))操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。正则表达式是一种文本模式,模式描述在搜索文本时要匹配的一个或多个字符串。
js里的正则表达是通常是 new RegExp(),对象创建,或者直接用字面量 /【表达式】/ 来表示 (两个斜线/中间包含匹配规则)

【【先上干货,方便查找】】

正则表达式知识点——一篇就够
未标题-1.png

基础知识

匹配普通字符

1.例如匹配 字母a 可以直接写/a/ ,匹配abc 可以直接写作/abc/

2.匹配子集,可以使用[]中括号来表示,例如匹配a或b或c 可以写作 [abc] ,如果匹配所有小写字母可以写作[a-z]。如果是不匹配abc中的任何一个可以写作[^abc],中括号里^表示 非

3.匹配集符号, 一些约定的匹配固定类型字符的集合表达式,例如匹配空白字符(包括空格,换行制表符等)可以用 s , 表达是写做/s/

正则表达式知识点——一篇就够
image.png

正则表达式知识点——一篇就够
image.png

4.特殊字符。一些字符在表达式里有特殊的意义,比如^ 表示匹配字符串开始,+表示一个或者多个;这类字符如果需要直接匹配字符本身的话,需要加转义, 比如+

正则表达式知识点——一篇就够
image.png

5.限定符:限定符主要用来控制匹配次数,比如匹配a五次 可以携程 /a{5}/ ,出现少于5次的a都不会被匹配。不写限定符的话默认就是匹配一个

【限定符+和*都是贪婪的,也就是说会尽可能多的去匹配,在后边加上?就可以改成非贪婪的,就是尽可能少的满足条件的字符串】

正则表达式知识点——一篇就够
image.png

6.定位符: 确定匹配字符串出现的位置,比如^匹配字符串开始,$匹配字符串结尾

正则表达式知识点——一篇就够
image.png

7.修饰符: 也叫标示,正则表达式用于指定额外的匹配方式(策略)

正则表达式知识点——一篇就够
image.png

8.分组、引用 和 捕获: 用()将表达式包起来,那么如果匹配成功,被匹配的字符串就会被单独提取出来

  ***直接匹配的结果会被放到匹配结果的key=0位置,有分组的是从1开始按顺序排列,有命名的会被放到groups里,key就是自定义的命名***
 **这就叫分组,分组的内容会被捕获到匹配结果里。分组可以被引用,也可以命名并引用**

分组引用:
/([abc]{5})[0-8]1/ // 可以用 斜杠加数字(分组出现顺序排列),来引用之前分组匹配到的字符
命名分组:

    let reg2 = /(?[abc]{5})[0-9]+a/
    let res1 = reg2.exec('abcab98809abcab')
    console.log(res1)   //  {0: "abcab98809a",1: "abcab",groups: {a: "abcab"},index: 0,input: "abcab98809abcab",length: 2 }
    // 有命名的分组会出现在groups里,可以通过自定义的名字找到相应匹配结果

例如:

  var str1 = '1234596absdkfjk544asdfkadsfk'
  var reg1 = /([1-9]{2})[a-z]+/g
  var res1 =  str1.match(reg1)  // 也可以用reg1.exec(str1) 前者是字符串的方法,后者是正则对象的方法
  console.log(res1)  //  ['96absdkfjk', '44asdfkadsfk']
  var res2 = reg1.exec(str1)  // 匹配到第一个就会结束,下次调用从第一个匹配结束的索引开始匹配
  console.log(res2) // ["96absdkfjk", "96", index: 5, input: "1234596absdkfjk544asdfkadsfk", groups: undefined]
  var reg2 = /([1-9]){2}[a-z]+/
  var res3 =  str1.match(reg2)
  console.log(res3) // ["96absdkfjk", "6", index: 5, input: "1234596absdkfjk544asdfkadsfk", groups: undefined]
  // 此时没有全局匹配标示符g,只匹配第一个然后就结束
  *运算符优先级*
正则表达式知识点——一篇就够
image.png

易错点

书写格式问题,正则表达式的规则比较严格,不要有空格或者换行等多余字符,否则可能不会执行
例如:现在js习惯,会同城在 逗号 ,后加空格 /[0-9]{3, 5}/ 乍一看,没什么问题。但是它不会执行,因为3,后边有个空格.所以正则表达式不会正常执行,并且总是返回false。

先行断言或者后行断言是并列的,不是串行的
例如: /(?=a)(?=b)2/ 匹配a2或者b2
/(?!a)(?!b)2/ 意思是不匹配 a2 并且不匹配b2

常用正则表达式 (持续更新)

  // 电话 
  let phone = /^1[3-9][0-9]{9}$/
  // 邮箱
    let email = /^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(.[a-zA-Z0-9_-]+)+$/
    // 身份证
    let idCard = /^$|^[1-9][0-9]{15,17}[xX]?$/
    // 匹配年份
    let treg = /^$|^[12]{1}[0-9]{3}$/
   // 匹配月份
    treg = /^$|^0?[1-9]$|^1[0-2]{1}$/
   //  匹配日
    treg = /^$|^0?[1-9]$|[12][0-9]$|^3[01]$/
    // 复杂密码 8-20位 必须包含数字,字母 和特殊符号(~!@#$%^&*(){}[]|-+)
    let password = /^(?!d+$)(?![a-zA-Z]+$)(?![a-zA-Z0-9]+$)(?![0-9*/-+.\{}[]()&|^%$#@!~]+$)(?![a-zA-Z*/-+.\{}[]()&|^%$#@!~]+$)[0-9a-zA-Z*/-+.\{}[]()&|^%$#@!~]{8,20}$/
    // 匹配汉字
    let word = [u4e00-u9fa5]
    // 爬虫常用,获取图片路径
    let img = //
    
声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:qvyue@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。