新手快速学习正则

2023-03-27 16:56:20

正则表达式

  • 正则表达式我们可以叫规则表达式
  • 由我们自己编写的规则
  • 专门用来检测一个字符串是否符合我们的书写标准
  • 一般都是用在表单认证 、 从字符串中获取某些内容

创建正则表达式的方式

  • 字面量创建
    • 不能进行字符串拼接
    const reg = /\d{3}/
  • 内置构造函数创建
    • 第一个参数是写在正则内部的符号
      • 当你需要写一些正则的元字符的时候 需要写成 \d
    • 第二个参数是标识符
      • 可以把多个标识符写在一个字符串里面
      • 可以进行字符串拼接
    const reg = new RegExp('\\d{3}')
    var reg2 = new RegExp('a' + s + 'd')
正则表达式是一个复杂类型
正则表达式就是用来检测字符串是否满足要求的

元字符

  • 就是用来描述内容的符号
  1. .(点) 非换行的任意字符
  2. \(斜线) 转义 ====》 把有意义的变成没意义的 =====》 把没意义的变成有意义的
  3. \s 空格
  4. \S 非空格
  5. \d 数字
  6. \D 非数字
  7. \w 数字字母下划线
  8. \W 非数字字母下划线
  • \n :表示换行 , 将当前位置移到下一行开头
  • \r : 表示回车 , 将当前位置移到本行开头

边界符

  • 用来限制正则的边界,也是限制字符串的边界
  1. ^ 开始
  2. $ 表示结束
  • 在使用正则表达式表示以什么开头以什么结尾

限定符

  • 用来描述每一个正则 元字符 出现的次数
  1. +(加号) 表示 1 到 正无穷次
  2. *(星号) 表示 0 到 正无穷次
  3. ?(问号) 表示 0 或者 1 次
  4. {n} 表示 n 次
  5. {n,} 表示至少 n 次 {1,} {1,}:等价于 + {0,}:等价于 *
  6. {n,m} 表示 至少 n 次,至多 m 次 {0,1}:等价于 ?

特殊符号

  1. () 小括号 表示一个集合 在捕获的时候单独捕获
  2. [] 中括号 表示一个任意选择的集合 中括号内的内容出现任意一个就行
  3. [^] 表示一个非任意选择集合 出现在这个符号中的任意一个字符都不能出现
  4. |或 || 逻辑或 | 占位或 一般和小括号一块使用
  5. -(中划线,英文状态下的中划线)
    • 到(至)
    • 一般和中括号一起使用
    • 必须是 ASCII 编码挨着的
    • [0-9] 等价与 \d
    • [^0-9] 等价于 \D
    • [0-9a-zA-Z_] 等价于 \w
    • [^0-9a-zA-Z_] 等价于 \W

正则的方法

  • 匹配
    • 就是检测看看字符串是否符合规则
    • test()
    • 语法:正则表达式.test(字符串)
    • 返回值:如果字符串满足我写的规则,就返回true,否则就返回false
    const reg = /abcd/
    let str = "asdasdasdasdas  asdasd"
    let res = reg.test(str)
    console.log(res)

  • 捕获
    • 就是把字符串中符合要求的那一段字符给我单独拿出来
    • exec()
    • 语法:正则表达式.exec(要捕获的字符串)
    • 返回值:是一个数组
      • 有一些内容
      • 数组第 0 项 是按照正则要求捕获出来的内容
      • index:表示我找到的这个字符片段是从哪一个索引开始的
      • input:表示原始字符串
    • 因为正则的懒惰性
      • 捕获完毕以后,下次捕获的时候还是从索引 0 开始查找
    • 当正则有了标识符 g 的时候
      • g 表示全局的意思
      • 会在第二次捕获的时候,从第一次捕获的结尾开始查找
      • 如果没找到就返回 null
      • 当它返回 null 之后,下次的捕获又会从索引 0 开始捕获
    • 正则的标识符
      • 标识符是写在正则后面的
    var reg = /\d{3}/
    var str = 'abcdefg123abcdefg234abcdefg456asdasd'
    var res = reg.exec(str)
    var res2 = reg.exec(str)
    console.log(res)
    console.log(res2)

    var reg = /\d{3}/g
    var str = 'abcdefg123abcdefg234abcdefg456asdasd'
    var res = reg.exec(str)
    var res2 = reg.exec(str)
    var res3 = reg.exec(str)
    var res4 = reg.exec(str)
    var res5 = reg.exec(str)
    console.log(res)
    console.log(res2)
    console.log(res3)
    console.log(res4)
    console.log(res5)


标识符

- 对正则的特殊修饰
1. g 
   - 全部捕获
   - 抵消正则的懒惰性
2. i
   - 忽略大小写
   - 正则在检测字符串的时候不管字母的大小写   

字符串和正则合作的方法

  • search()
    • 语法:字符串.search(正则)
    • 返回值:
      • 如果找到,返回的是字符串片段开始的索引
      • 如果没有, 就是返回 -1
    var reg = /\d{3}/
    var str = 'abcd123abcd123'
    var res = str.search(reg)
    console.log(res)

  • match()
    • 语法:字符串.match(正则)
    • 返回值:
      • 当正则没有全局标识符 g 的时候,和 exec 方法一样
      • 当正则有全局标识符 g 的时候,返回值是捕获到的每一个内容(以一个数组的形式返回)
    var reg = /\d{3}/
    var str = 'asdasdas234asdad456sdasd789asdsa'
    var res = str.match(reg)
    console.log(res)

    var reg2 = /\d{3}/g
    var str2 = 'asdasdas234asdad456sdasd789asdsa'
    var res2 = str2.match(reg2)
    console.log(res2)
    
  • replace()
    • 语法:字符串.replace(正则)
    • 返回值:替换好的字符串
      • 没有全局标识符 g 的时候是只替换一个
      • 有全局标识符 g 的时候,会全部替换
    var str = 'asdasdasdadHHasdasdHHasdasdHHasdadsasdHHasdasdasd'
    var reg = /HH/g
    var res = str.replace(reg, '**')
    console.log(res)
    
  • 作者:执酒笑白衣
  • 原文链接:https://blog.csdn.net/qq_45565773/article/details/106669233
    更新时间:2023-03-27 16:56:20