浅识js——正则表达式

181 阅读4分钟

js基础知识 —— 正则表达式

  • 什么是正则?
    • 我们自己来书写规则,然后专门检测字符串是否符合规则

一、创建正则表达式

  • 方法一:var reg = /正则的内容/
  • 方法二: var reg = new RegExp(正则的内容)

二、正则的常用方法

1.匹配

  • test 匹配字符串是否符合正则规则
  • 返回值为布尔值 (true / false)
  • 语法: reg.test(str1) //匹配str1中是否包含正则内容
         var reg = /asd/  //匹配一段字符串是否包含asd

         var str1 = 'a'
         var str2 = 'as'
         var str3 = 'asd'
         var str4 = 'asdf'
         var str5 = 'as1d2'

         console.log(reg.test(str1))   //false
         console.log(reg.test(str2))   //false
         console.log(reg.test(str3))   //true
         console.log(reg.test(str4))   //true(包含即可)
         console.log(reg.test(str5))   //false

2.捕获

  • 语法:正则.exec(字符串)

情况1:字符串中没有符合正则规则的内容,捕获结果为null

      var reg = /\d{3}/  
      console.log(reg.exec('qwriryop'))  //null

情况2:正则没有小括号,没有标识符g

  • 捕获结果:为一个数组,下标0是我们捕获到的值,不管捕获多少次,都是从下标[0]开始,第一个满足条件
     var reg = /\d{3}/ 
     console.log(reg.exec('qwr123iry456opmnvx789'))  // [0]123
     console.log(reg.exec('qwr123iry456opmnvx789'))  // [0]123

情况3:有小括号

  • 捕获结果:下标0是符合正则规则的字符串,从下标1开始,是每个小括号单独捕获出来的内容
      var reg = /(\d{4})(\d{4})(\d{4})(\d{4})(\d{2})/ 
      var num = '142723199912062222'
      console.log(reg.exec(num))

情况4:有标识符g (g全局标识符)

  • 捕获结果为一个数组,第二次捕获时,会从第一次捕获结束的位置开始进行捕获,直到找不到内容会返回一个null,然后下一次会从字符串开始位置重新开始捕获
      var reg = /\d{3}/g
      var str = 'qwr123iry456ovx789'
      console.log(reg.exec(str))  //[0]123
      console.log(reg.exec(str))  //[1]456
      console.log(reg.exec(str))  //[2]789
      console.log(reg.exec(str))  //null
      console.log(reg.exec(str))  //[0]123 一次类推

三、正则的元字符

1.普通元字符

  • \d 表示一位数字(范围 0~9)

      var reg = /\d/
      console.log(reg.test('asd')) //F
      console.log(reg.test('asd12'))  //T
      console.log(reg.test('13654'))  //T
    
  • \D 表示一位非数字( 除了0~9)

      var reg = /\D/
      console.log(reg.test('asd')) //T 
      console.log(reg.test('asd12')) //T
      console.log(reg.test('13654')) //F
    
  • \s 表示一位空白内容

      var reg = /\s/
      console.log(reg.test('as dl')) //T
      console.log(reg.test('asd12')) //F
      console.log(reg.test('13 65 4')) //T
    
  • \S 表示一位非空白内容

      var reg = /\S/
      console.log(reg.test('as dl')) //T
      console.log(reg.test('asd12')) //T
      console.log(reg.test(' '))  //F
    
  • \w 表示一位 数字 字母 下划线(包含一个即可)

      var reg = /\w/
      console.log(reg.test('as dl_')) //T
      console.log(reg.test('asd12')) //T
      console.log(reg.test('&&_'))  //T
      console.log(reg.test('&&!$&*'))  //F
    
  • \W 表示一位空白内容

      var reg = /\W/
      console.log(reg.test('asdl_')) //F
      console.log(reg.test('asd12')) //F
      console.log(reg.test('a&_1'))  //T
      console.log(reg.test('&&!$&*'))  //T
    
  • . 表示一位非换行内容

      var reg = /./
      console.log(reg.test('&& _'))  //T
      console.log(reg.test('asdj'))  //T
      console.log(reg.test('1265'))  //T
      console.log(reg.test('\n'))    //F  (\n表示换行)
    
  • \ 表示转义 将有意义的转换为没意义的(. \d 转义后仅为 . 和 d)

      var reg = /\d\.\d/ // 表示小数 几.几
      console.log(reg.test('&& _'))  //F
      console.log(reg.test('132'))  //F
      console.log(reg.test('1.2'))  //T
      console.log(reg.test('Adg'))    //F  
    

2.边界元字符

  • ^ 表示开头

      var reg = /^\d/  //表示数字开头
      console.log(reg.test('12Adg'))    //T  
      console.log(reg.test('as12'))    //F 
    
  • $ 表示结尾

      var reg = /\d$/  //表示数字结尾
      console.log(reg.test('12Adg'))    //F 
      console.log(reg.test('as12'))    //T 
    

**注:^ $ 一起使用时,字符串的内容必须与正则内容相同

   var reg = /^asd$/  //表示字符串必须是asd
   console.log(reg.test('asd'))  //T
   console.log(reg.test('asdfv'))  //F

3.限定元字符(限定前一个符号出现多少次)

  • * 表示0~正无穷 次
      var reg1 = /^\d$/  //只能出现一个数字
      var reg = /^\d*$/  //长度 0~无穷 全为数字
      console.log(reg.test('asd'))  //F
      console.log(reg.test('12asd32'))  //F
      console.log(reg.test('127896'))  //T
      console.log(reg.test(''))  //T
  • + 表示1~正无穷 次
      var reg = /^\d*$/  //长度 1~无穷 全为数字
      console.log(reg.test('asd'))  //F
      console.log(reg.test('12asd32'))  //F
      console.log(reg.test('127896'))  //T
      console.log(reg.test('6'))  //T
      console.log(reg.test(''))  //F
  • ? 表示 0~1 次
      var reg = /^\d?$/  //长度 0~1 全为数字
      console.log(reg.test('12asd32'))  //F
      console.log(reg.test('127896'))  //F
      console.log(reg.test('6'))  //T 1次
      console.log(reg.test(''))  //T   0次
  • {n} 表示限定n 次
      var reg = /^\d{3}$/  //长度3 全为数字
      console.log(reg.test('12asd32'))  //F
      console.log(reg.test('127'))  //T  3次
      console.log(reg.test('6'))  //F   1次
      console.log(reg.test(''))  // F  0次
  • {n,} 表示限定最少n 次 [n,正无穷)
      var reg = /^\d{3,}$/  //长度 >=3 全为数字
      console.log(reg.test('12asd32'))  //F
      console.log(reg.test('127896'))  //T
      console.log(reg.test('666'))  // T 1次
      console.log(reg.test(''))  //F   0次
  • {n,m} 表示限定最少n次,最多m次 [n,m]
      var reg = /^\d{3,5}$/  //长度 >=3 <=5 全为数字
      console.log(reg.test('12asd32'))  //F
      console.log(reg.test('12345'))  //T
      console.log(reg.test('666'))  // T 1次
      console.log(reg.test('1234'))  //T   0次

4.特殊元字符

  1. ( ) 小括号
    • 含义1——单独捕获
    • 含义2——一个整体
      //一个整体
      var reg = /^(asd){2}$/ 
      console.log(reg.test('asdasd')) //T
      console.log(reg.test('asdqwe')) //F
      console.log(reg.test('asd'))    //F
  1. | 或
      var reg = /a|b/  //有a/b就行
      console.log(reg.test('a')) //T
      console.log(reg.test('b')) //T
      console.log(reg.test('p')) //F
      console.log(reg.test('ab'))    //T
      console.log(reg.test('ADFGad'))    //T

3.[ ] 包含[ ]内其中一个即可(注:全部包含也是错的,只能是一个)

      var reg = /^[asdf]$/   //字符串是asdf中的一个就行
      console.log(reg.test('a'))  //T
      console.log(reg.test('s'))  //T
      console.log(reg.test('d'))   //T
      console.log(reg.test('f'))   //T
      console.log(reg.test('asdf'))   //F

4.[^]非 不包含[ ]中的符号即可 (只能是1个)

      var reg = /^[^asd]$/   //字符串不是asdf中的一个就行
      console.log(reg.test('a'))  //F
      console.log(reg.test('s'))  //F
      console.log(reg.test('d'))   //F
      console.log(reg.test('f'))   //T
      console.log(reg.test('asd'))   //F
  1. - 到、至 ,通常与[ ][^]连用
    [0-9]  === /d  (代表0~9)
    [^0-9] === /D
    [0-9a-zA-Z_] === /w
    

5.重复元字符

  • 符号:\数字
  • 含义:重复第n个小括号里面的内容,并且要求和小括号里的内容完全一致
    var reg = /^(ab|cd)\1$/
    console.log(reg.test('abab'))  //T
    console.log(reg.test('cdcd'))  //T
    console.log(reg.test('abcd'))  //F
    console.log(reg.test('cdab'))  //F

案例练习:要求字符串是span/p标签

  var reg = /<(span|p)><\/\1>/
  console.log(reg.test('<span></span>')) //T
  console.log(reg.test('<p></p>'))       //T