有关正则的知识点梳理

正则

一个用来处理字符串的规则,通过规则我们可以验证字符串是否匹配对应的格式(TEST),也可以把正则匹配的结果在字符串中捕获到(EXEC)

正则由两部分组成:

  • 修饰符:i(ignoreCase忽略大写小匹配)、m(multilin匹配多行)、g(global全局匹配,解决正则捕获的懒惰性)
  • 元字符
    • 特殊元字符
      • :转译字符
      • ^:以某一个元字符开头
      • $:以某一个元字符结尾
      • .:除了 (换行符)以外的任意字符
      • d:0-9之间的一个数字,等价于[0-9]
      • D:和d相反,除了0-9之间的任意字符,所有这类情况的(s、…)都有一个大写情况,也都是和本身意思相反
      • :边界
      • s:匹配任意一个空白字符(空格和制表符)
      • w:匹配数字、字母、下划线中的任意一个,等价于[a-zA-Z0-9_]
      • [xyz]:x、y、z三者中的任意一个
      • [^xyz]:取反,除了x/y/x三者之外的任意字符
      • [a-z]:获取范围中的任意一个字符
      • [^a-z]:取反
      • |:或者
      • ():分组
      • ?: :只匹配不捕获
      • ?=:正向预查
      • ?!:负向预查
    • 量词元字符
      • *:出现零到多次
      • +:出现一到多次
      • ?:出现零次或者一次
      • {n}:出现N次
      • {n,}:出现n到多次
      • {n,m}:出现n到m次
    • 普通元字符:在 / / 包含起来的,除了具有特殊意义的,其余的都是代表本身意思的普通元字符

[]的一些特殊情况:

  • 中括号中出现的字符,大部分都是代表本身的意思,例如:
/^[d.]$/

d还是0-9之间一个数字,.不是任意字符只是一个小数点

  • 中括号中不识别多位数字,例如:/[1]$/ 1或者2-4或者0,三者中的一个

()的作用:

  • 改变优先级,栗如:
    • /^18|29$/ 匹配18、29、182、189、829、129、1829…都符合
    • /^(18|29)$/ 匹配18、29
  • 分组捕获:在正则每一次捕获的时候,除了可以把大正则匹配的结果捕获到,还可以把里面小分组匹配的内容捕获到,栗如:
  
  • 分组引用:1代表和第一个分组出现一模一样的内容,2和第二个分组出现一模一样的内容…
  
  • 查找当前是第几个有效分组
  
  • 常用的正则:
  

  

    

   

  

  

  

  

正则的两个方法: 检测test 捕获exec

注意语法和返回值,区分字符串中的search,match,replace方法的用法

语法 : var reg = 6/^d+$/g;

reg.test('hello2017JavaScript');

reg.exec('hello2017JavaScript');

  • 正则捕获的特点:

          • test、exec、match、replace、split…大部分字符串中支持正则的方法都可以实现正则的捕获

          • 1)懒惰性->
            如何解决懒惰性? ->在正则的末尾加一个修饰符"g"
           global(g):全局匹配
            
            ignoreCase(i):忽略大小写匹配
            
            multiline(m):多行匹配
            
            lastIndex:是正则每一次捕获在字符串中开始查找的位置,默认的值是0

          原理:加了全局修饰符g,正则每一次捕获结束后,我们的lastIndex的值都变为了最新的值,下一次捕获从最新的位置开始查找,这样就可以把所有需要捕获的内容都获取到了

          • 2)贪婪性 正则的每一次捕获都是按照匹配最长的结果捕获的

            例如:2符合正则 2015也符合正则,我们默认捕获的是2015

            var reg = /d+/g;//->出现一到多个0-9之间的数字
            var str = "zhufeng2015peixun2016yangfan2017";
            console.log(reg.exec(str));//->["2015"...]
          如何解决正则的贪婪性 ->在量词元字符后面添加一个?即可

          ?在正则中有很多的作用:

          放在一个普通的元字符后面代表出现0-1次 /d?/ ->数字可能出现也可能不出现

          放在一个量词的元字符后面是取消捕获时候的贪婪性

          • 1)捕获到的内容是一个数组

          数组中的第一项是当前大正则捕获的内容

          index:捕获内容在字符串中开始的索引位置

          input:捕获的原始字符串

          ?的作用:①0或1次,②在量词修饰符后面加?是解决贪婪性,③?:reg是只匹配不捕获

          分组捕获()

  • 封装一个方法收集正则捕获到的结果

  
  • 字符串中可以使用正则的几个方法,区分与正则方法用法的差别
  
  • 小案例
    • 1)检测有效数字
    • 2)检测身份证号码
    • 3)年龄范围18-65
    • 4)replace方法实现20170418->贰零壹柒零肆壹捌
原文地址:https://www.cnblogs.com/Scar007/p/7606245.html