• 解析Js 正则表达式


    Js正则表达式

    • 正则表达式是对字符串操作的一种逻辑公式

    • 这里推荐一个正则表达式的在线测试网站:正则表达式在线测试

    正则语法

    • 在 JavaScript 中,正则表达式也是对象,是一种索引类型。
    * 使用一个正则表达式字面量是最简单的方式。两个 / 是正则表达式的定界符。
    
    * 创建正则的方法有两种:
    
      //创建正则的第一种方法 , 正则的字面量
      var reg = /abc/;
      //第二种,通过 构造函数  的创建
      var reg1 = new RegExp("adf")
    

    使用正则,如下代码:

     var str = "aaababggbdssddbbssGGGwew";
    console.log(str.match(/s+/));
     //修饰符g 实现全局查找
     console.log(str.match(/s+/g));
     // i 修饰符   字母大小写不敏感
     console.log(str.match(/g+/ig));
    
    正则表达式方法结合字符串的方法使用

    字符串的方法:

    • split() 根据匹配字符串切割父字符串
     //与字符串相关方法   split ---- 分割
     // split方法:分隔字符串,成为一个数组 
     var str = "aaa     cde ssss rrrrrre eeer";
     //使用一个空格字符进行精确分隔
     var str1 = str.split(" ");
     console.log(str1)
     // 使用正则表达式进行模糊匹配分割
     var str2 = str.split(/\s+/);//空白(\s)出现一次或是多次(+)
     console.log(str2);
    
    • match() 使用正则表达式与字符串相比较,返回一个包含匹配结果的数组。
    // match 寻找匹配字符串
    //aaansdddsopqwqeieaaaaasdffff   寻找重复的a
    var a = "aaansdddsopqwqeieaaaaasdffff";
    console.log(a.match(/a+/));//匹配了第一个后就结束
    // 边界符,全局修饰符---g,如果有全局修饰符g,会找到所有匹配的字符串后结束
    console.log(a.match(/a+/g));//匹配了第一个后就结束
    
    var a2 = "aaa o   obbb o       o   aaa";
    console.log(a2.match(/o\s+o/g));//找"o    o"
    
    • search() 对正则表达式或指定字符串进行搜索,返回第一个出现的匹配项的下标。
    //search--- 找出搜索字符串在父字符串的位置,返回的是位置
     var s = "addhed";
     console.log(s.search("e"));
     console.log(s.search(/dh/));
     //search与indexof不同的是,search支持正则表达式
    
    • replace() 用正则表达式和字符串直接比较,然后用新的子串来替换被匹配的子串。
     //replace  替换字符串为指定字符串,原始字符串不受影响
     var a3 = "alo hahaha hei";
     console.log(a3);
     console.log(a3.replace(/hei/,"hello"));
    

    正则表达式方法:

    • exec() 在目标字符串中执行一次正则匹配操作。
    // 正则方法------exec    寻找匹配字符串,找到停止(全局修饰符也没用)
    var a4 = "aaabssdertttr";
    console.log(/ab/.exec(a4));
    
    • test() 测试当前正则是否能匹配目标字符串
    //test 检测字符串是否符合正则表达式的规则 , 返回布尔值
    console.log(/ab/.test(a4));
    console.log(/aeb/.test(a4));
    
    如何在一个字符串内换行不报错,将字符串的双引号换成即可反引号
    
    正则的术语
    * 字符集:字符集 [ ] ,字符中的一个字符串,多选一效果,有一个满足就算匹配成功
    
      * 简单类: 正则的多个字符对应一个字符,我们可以用 [] 把它们括起来,让 [  ] 这个整体对应一个字符[abc]
    
    //简单类:多个可能匹配的字符连续写在一起,只要其中一个匹配成功即可
    var reg = /[abd]/;
    console.log(reg.test("aafaasd"));
    
    • 范围类: 有时匹配的东西过多,而且类型又相同,全部输入太麻烦,我们可以在中间加了个横线。[a-z]、[0-9]、[A-Z]
     //范围类  匹配同一类型且连续在一起的字符,中间-连接
     var r2 = /[0-9]/;
     console.log(r2.test("233oiuoisd"));
     var r3 = /[a-z]/;
     console.log(r3.test("233oiuoisd"));
    
    • 负向类: [] 前面加个元字符进行取反,表示匹配不能为括号里面的字符。[^a]
    //负向类  [^a]---- 只要不是a就匹配成功   (^和[]一起用)
    var r4 = /[^e-h]/;
    console.log(r4.test("233oiuoisd"));
    
    • 组合类: 允许用中括号匹配不同类型的单个字符。[0-9a-b]
     //组合类  单一类型或简单类 并不能匹配所有结果
     //将多个写法书写在一起
     var r5 = /[0-9a-z]/;
     console.log(r5.test("233oiuoisd"));
    
    //如果数字、大写字母、小写字母,按照这种顺序书写完整的范围,可以进行缩写
    // [0-Z]、[0-z]
    var r6 = /[0-Z]/;
    console.log(r6.test("233oiuAoisd"));
    
    • 修饰符

      • g 修饰符用于执行全局匹配(查找所有匹配而非在找到第一个匹配后停止)。

      • i 修饰符用于执行对大小写不敏感的匹配。

    var str = "aaababggbdssddbbssGGGwew";
    console.log(str.match(/s+/));
    //修饰符g 实现全局查找
    console.log(str.match(/s+/g));
    // i 修饰符   字母大小写不敏感
    console.log(str.match(/g+/ig));
    
    • 边界

      • ^ 开头 注意不能紧跟于左中括号的后面

      • $ 结尾

    var str = "hello**world";
    
    //开头 ^ ,表示限制开头,后面的正则内容匹配的结果必须是字符串的开始 
    //  ^ ,不要和[]一起用,否则会变成反向类
    console.log(/^hello/.test(str));
    
    //结尾 $ ,表示结尾,前面的正则内容匹配的结果必须是字符串的结尾
    console.log(/ld$/.test(str));
    
    • 预定义类

      • .(点) 除了换行和回车之外的任意字符
      • \d 数字字符
      • \D 非数字字符
      • \s 空白字符
      • \S 非空白字符
      • \w 单词字符(所有的字母/数字/下划线)
      • \W 非单词字符
    * 量词
    
      * {n}        硬性量词 :对应零次或者n次
    
      // {n}   硬性量词   对应出现零次 或 n次
      //  /^$/限制内容为
      console.log(/^\d{5}$/.test("123"));//false
      console.log(/^\d{5}$/.test("12345"));//true
      console.log(/^\d{5}$/.test("123456"));//false
    
    • {n,m} 软性量词 :至少出现n次但不超过m次(中间不能有空格)
      //{n,m}  软性量词   至少出现n次但不超过m次(中间不能有空格) 
      console.log(/^\d{5,7}$/.test("124443"));
      console.log(/^\d{5,7}$/.test("1244999943"));
    
    • {n,} 软性量词 :至少出现n次(+的升级版)
    //{n,}    软性量词   至少出现n次(+的升级版)
    console.log(/^\d{5,}$/.test("124443"));
    
    • ? 软性量词: 出现零次或一次
     //?       ------    出现零次或一次
     console.log(/^\d{0,1}$/.test("2"));
     console.log(/^\d?$/.test("3"));
     console.log(/^\d{0,1}$/.test("124443"));
     console.log(/^\d?$/.test("124443"));
    
    • * 软性量词 :出现零次或多次(任意次)
      //*       ------    出现零次或多次(任意次)
    console.log(/^\d*}$/.test("124443"));
     console.log(/^\d*$/.test(""));
    
    • + 软性量词 :出现一次或多次(至少一次)
    //+       ------    出现一次或多次  (至少一次)
     console.log(/^\d+$/.test("124443"));
     console.log(/^\d+$/.test(""));
    
    • 分组:用中括号表示范围内选择,大括号表示重复次数。如果想获取重复多个字符,就用小括号进行分组
    // 匹配 连续重复出现字符串
    console.log(/^(abc){2}$/.test("abcabc"));
    console.log(/^(abc){2}$/.test("aabbcc"));
    
    • 或操作符
    //或操作符
    // 竖线(|)
    // /a|bd/   匹配a或bd  a、bd都出现也是对的
    console.log(/^a|abc$/.test("aabcabc"));
    
    分组和或组合使用
    // a、bd二选一时   分组和或搭配使用
    console.log(/^(a|bd)$/.test("abd"));
    console.log(/^(a|bd)$/.test("bd"));
    console.log(/^(a|bd)$/.test("ab"));
    
    // /(ab)+|(cd)+/   匹配出现一次或多次的ab或cd
    console.log(/^(ab)+(cd)+$/.test("abcaadcdcdcdabc"));
    
    • 分组的反向引用
    //分组的反向引用
    // 正则中通过分组匹配到的字符串,会被进行编号,从1开始
    // 在正则内部可以通过 \1 方式,去对字符串进行反向引用
    console.log(/^([a-z]{3})\1$/.test("abcabc"));
    console.log(/^([a-z]{3})\1$/.test("abcadc"));
    
    String函数replace的语法格式是stringobject.replace(reg/str,replacement),replacement可以是字符串也可以是函数。结合分组的反向引用可以实现对字符串的更多操作
    //正则表达式以外  $1 ,进行字符串引用  多用于replace
    var str = "123*499".replace(/^(\d{3})\*(\d{3})$/,"$2*$1");
    console.log(str);
    
    //replace 的第二个参数还可以是函数
    var str2 = "111*222".replace(/^(\d{3})\*(\d{3})$/,function(match,$1,$2){
    return $2*10 + "," + $1;
    });
    console.log(str2);
    
    • 中文字符
      匹配中文:[\u4e00-\u9fa5]
    // [\u4e00-\u9fa5]
    console.log(/^[\u4e00-\u9fa5]+$/.test("中文字符集"));
    console.log(/^[a-z\u4e00-\u9fa5]+$/.test("中文字符集a"));//只要不全是中文就是false
    
  • 相关阅读:
    网页性能优化,缓存优化、加载时优化、动画优化--摘抄
    display的32种写法--摘抄
    transform与position:fixed的那些恩怨--摘抄
    float 常见用法与问题--摘抄
    10个JavaScript难点--摘抄
    CSS3 动画卡顿性能优化解决方案--摘抄
    CSS 盒模型、解决方案、BFC 原理讲解--摘抄
    web实时长图实践--摘抄
    移动端H5多平台分享实践--摘抄
    canvas绘制视频封面--摘抄
  • 原文地址:https://www.cnblogs.com/dreamtown/p/14549215.html
Copyright © 2020-2023  润新知