JS高级—正则表达式

正则表达式

概述
概念
  • 对字符串操作的一种逻辑公式
  • 用事先定义好的一些特殊字符、及这些特定字符的组合,组成一个”规律字符串“,用来表达对字符串的一种过滤逻辑
作用
  • 给定的字符串是否符合正则表达式的过滤逻辑(匹配)
  • 通过正则表达式,从字符串中获取我们想要的特定部分(提取)
  • 强大的字符串替换能力(替换)
创建方法
  • 使用正则表达式字面量创建(最为常用)

    var reg = /abc/;
    
  • 调用RegExp对象的构造函数

    var reg1 = new RegExp("abc");
    
字符串方法
  • split

    • 分隔字符串,成为一个数组

      var str = "aa bbb    c dd eeeee";
      var arr = str.split(" "); 
      //(8) ["aa", "bbb", "", "", "", "c", "dd", "eeeee"]
      var arr = str.split(/\s+/); 
      //(5) ["aa", "bbb", "c", "dd", "eeeee"]
      
  • search

    • 寻找匹配字符串在父字符串中位置,返回第一次出现的下标值

      var str = "abcdef";
              console.log(str.search(/de/)); //3
              console.log(str.search(/ed/)); //-1
      
  • match

    • 在父字符串中寻找匹配字符串,将结果输出到数组中

      var str = "abbcccbbbbbddbbbdabbb";
      var arr1 = str.match(/b+/); //匹配到第一个后就结束bb
      var arr2 = str.match(/b+/g);
      //["bb", "bbbbb", "bbb", "bbb"]在全局下查找添加g
      
  • replace

    • 替换父字符串中匹配字符串,原字符串不会改变

      var htl = "www.hello.com"
      console.log(htl.replace(/hello/, "nice-to-meet-u")); //www.nice-to-meet-u.com
      
正则方法
  • exec

    • 查找匹配的字符串输出到数组中,不论有没有全局修饰符,都只会在找到第一个之后停止

      var str = "aaabcccbacabc";
      var arr = /abc/.exec(str);
      console.log(arr);
      //["abc", index: 2, input: "aaabcccbacabc", groups: undefined]
      console.log(arr.index); //可以打点调用数组的具体值
      
  • test

    • 检测字符串中是否满足正则表达式的匹配规则,返回值是一个布尔值

      console.log(/abc/.test("aaabcccbacabc")); //true
      
  • 组成

    • 由一些普通字符和一些特殊字符(元字符)组成,普通字符包括大小写的字母和字符,元字符具有特殊的含义
    • 常用特殊字符:()、[]、{}、\、^、$、|、?、*、+,需要通过\进行转义
    • 预定义特殊字符:\t制表符空格 \n回车符 \b空格
字符
字符集
  • 使用[]表示的可能的字符的集合,集合内部可以排列多个匹配字符串的可能性,整个字符集需要匹配的是字符串中的一个字符

  • 简单类:[]多个可能匹配的字符连续书写在一起,只要其中一个匹配成功即可

    console.log(/[abc]/.test("eeeec")); //true
    
  • **范围类:**有时匹配的东西过多,类型又相同,可以中间加一个横线

    console.log(/[a-z]/.test("01234")); //false
    
  • 负向类:[]前面加一个元字符进行取反,表示匹配不能是括号中字符

    console.log(/[^a-z]/.test("g987")); //true,单独出现
    
  • **组合类:**允许用中括号匹配不同类型的单个字符,如果是数字、大写字母、小写字母的顺序组合就可以进行缩小

    console.log(/[0-5 a-e]/.test("z98")); //false
    
修饰符
  • g修饰符用于执行全局匹配,查找到所有匹配而非在找到第一个匹配后停止

    var str = "aabblsdddbbbdlBBdllbbbbb";
    var arr1 = str.match(/b+/); //["bb"]
    var arr2 = str.match(/b+/g); 
    //(3) ["bb", "bbb", "bbbbb"]
    
  • i修饰符用于执行对大小写不敏感的匹配

    var arr3 = str.match(/b+/gi);
    //(4) ["bb", "bbb", "BB", "bbbbb"]
    
边界
  • ^开头,表示正则表达式必须以后面的内容限制开头

    console.log(/^hello/.test("hello js")); //true
    console.log(/^hello/.test("js hello")); //false
    
  • $结尾,表示正则表达式内容必须以限制内容结尾

    console.log(/js$/.test("hello js")); //true
    console.log(/js$/.test("js hello")); //false
    
  • 实际应用中我们会同时限制开头和结尾

    console.log(/^hello\s+js$/.test("hello js")); //true
    
预定义类
  • 其实是字符集的简介写法

    console.log(/^.+$/.test(`dajsdo
            `)); //false,只要不是回车换行即为真
    console.log(/^\d+$/.test(`123456`)); //true数字字符
    console.log(/^\d+$/.test(`123a456`)); //false
    console.log(/^\D+$/.test(`abcdef`)); //true非数字字符
    console.log(/^\D+$/.test(`abc123`)); //false
    console.log(/^\s+$/.test(`  `)); //true空白字符
    console.log(/^\S+$/.test(`asfg`)); //true非空白字符
    console.log(/^\S+$/.test(`  `)); //false
    console.log(/^\w+$/.test("az15_")); //true单词字符
    console.log(/^\W+$/.test("%$#^")); //true非单词字符
    
量词
  • {n}硬性量词,没有弹性,对应前面的内容必须在字符串中出现n次

    var reg = /^\d{5}$/;
    console.log(reg.test("1234")); //false
    console.log(reg.test("12345")); //true
    console.log(reg.test("123456")); //false
    
  • {n,m}软性量词,至少出现n次但不能超过m次{n,}至少出现n次+

    var reg = /^\d{2,5}$/;
    console.log(reg.test("1234")); //true
    console.log(reg.test("12345")); //true
    var reg2 = /^\d{3,}$/;
    console.log(reg2.test("12")); //false
    console.log(reg2.test("12345")); //true
    
  • 软性量词 ?出现0/1; *出现0/多次; +至少出现一次

    var reg3 = /^\d?$/;
    var reg4 = /^\d*$/;
    var reg5 = /^\d+$/;
    console.log(reg3.test("")); //true零或一
    console.log(reg3.test("")); //true零或多
    console.log(reg.test("")); //false一多以上
    
分组
  • 概念

    用中括号表示范围内选择,大括号表示重复次数,小括号进行包裹

    console.log(/^(bye){2}$/.test("byebye")); //true
    console.log(/^(bye){2}$/.test("bbyyee")); //false
    
  • 或操作符

    console.log(/^a|bye$/.test("byebye")); 
    //true,满足以a开头或者以bye结尾的
    // 如果想在正则中,在两个规则之间只能选择一个,不能包含其他的开头结尾,需要去加到运算分组中
    console.log(/^(ab|cd)$/.test("ab")); //true
    console.log(/^(ab|cd)$/.test("abcd")); //false
    
  • 反向引用

    对正则表达式中的匹配组捕获的子字符串进行编号

    • 通过"\编号(在表达式中)

      console.log(/^([a-z]{3})\1$/.test("byebye")); //true
      console.log(/^([a-z]{3})\1$/.test("byelie"));
      //false
      
    • “$编号(在表达式外)”进行引用

      var str = "123*456".replace(/^(\d{3})\*(\d{3})$/, "$2*$1");
      console.log(str); //456*123
      //replace函数可以进行传入函数,第一个参数必须是match
      var str = "123*456".replace(/^(\d{3})\*(\d{3})$/, function(match, $1, $2) {
                  return $1 * 3 + "/" + $2 * 2 //会自己转化为数字
      });
      console.log(str); //369*912
      
中文匹配
  • 匹配中文

    var reg = /^[\u4e00-\u99fa5]+$/;
    console.log(reg.test("只有中文内容")); //true
    console.log(reg.test("有 空格")); //false
    

    下一篇更精彩噢~ES6

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值