美文网首页WEB前端程序开发
归纳篇(二)正则表达式

归纳篇(二)正则表达式

作者: Maxine708 | 来源:发表于2017-03-02 00:37 被阅读0次

    假如不经常写正则表达式的话,真是学一遍忘一遍。自己再复习一遍正则表达式。另外,归纳篇会持续更新文章,但更新的目录可能是跳跃式,因为主要是我自己查缺补漏,参考梳理,后面还会再开一篇常用正则表达式汇总,自己写一遍加深这些规则,以后项目中要是用到可以比较方便。

    正则表达式的定义

    • 正则表达式是一个描述字符模式的对象。
    • ECMAScript中的RegExp类表示正则表达式。
    • 正则表达式用来验证客户端的输入数据。

    创建正则表达式

    1. 和创建字符串类似,一种是new方式,一种是字面量方式
    var pattern =new RegExp('pattern',‘gi’); //new方式,第一个参数是模式字符串,第二个可选参数是模式修饰符
    var pattern2=/pattern2/ig; //字面量方式,模式修饰符i(忽略大小写),g(全局匹配),m(多行匹配)
    

    正则表达式的属性和方法

    • 静态属性和实例属性(都没啥大用,了解过下)
      • 静态属性 :input、leftContext、rightContect、lastMatch、lastPattern、multiline
    var pattern =/google/;
    var str='This is a google!';
    pattern.test(str);//必须执行一下,静态属性才有效
    alert(RegExp.input)   //当前被匹配的字符串  
    alert(RegExp.leftContext)   //当前被匹配的字符串的前子串
    alert(RegExp.rightContext)   //当前被匹配的字符串的后子串
    alert(RegExp.lastMatch) //google 最后一个被匹配的字符串
    alert(RegExp.lastPattern)//  最后一对圆括号里匹配的字符串
    alert(RegExp.multiline)// false  用于指定是否所有的表达式都用于多行的布尔值
    
    • 实例属性:global、ignoreCase、lastIndex、multiline、source
    • 2个测试方法test()和exec();1个编译方法compile()
      • test()在字符串中测试模式匹配,返回true和false;
      • exec() 在字符串中执行匹配搜索,返回结果数组,其中存放匹配的结果;如果没有匹配就返回null;
    • compile()编译和改变后重新编译正则表达式;
    • 使用字符串的正则表达式的4个方法:
    • match():返回pattern中 子串或null;获取匹配的数组
    • replace(pattern,replacement):返回替换后的字符串;
    • search():返回匹配字符串中开始位置,找不到则返回-1
    • split():返回字符串指定匹配字符串拆分的数组
    var pattern =/google/g;
    var str='this google googlea googlea'; 
    console.log(str.match(pattern));  //返回数组["google", "google", "google"]
    console.log(str.replace(pattern,'box'));  //开启全局,全部替换,返回this box boxa boxa
    console.log(str.search(pattern));  //返回位置5
    console.log(str.split(pattern));  //返回数组["this ", " ", "a ", "a"]
    

    正则表达式的符号

    • 正则表达式由两种基本字符类型组成:原义文本字符和元字符
    • 元字符是在正则表达式中含有特殊含义的非字母字符

    \t //水平制表符
    \v //垂直制表符
    \n //换行符
    \r //回车符
    \0 //空字符
    \f //换页符
    \cX //与X对应的控制字符(Ctrl+x)

    • 字符类:
    var pattern=/[abc]/ //泛指字符abc这一类的字符
    var pattern=/[^abc]/ //^创建反向类/负向类,不属于某类的内容。表示不是a或b或c的内
    
    • 范围类
    'assklja1223'.replace(/[a-z]/g,'7'); // 得到"77777771223"。[a-z]表示26个小写字母a-z,也可以连写[a-zA-Z]
    'as-sk-lja-122-3'.replace(/[a-z-]/g,'Q'); //得到"QQQQQQQQQQ122Q3"。要匹配连字符-就直接加在里面[a-z-]
    
    • js预定义类及边界

    . //除了回车符和换行符之外的所有字符
    \d //数字字符
    \D //非数字字符
    \s //空白符
    \S //非空白符
    \w //单词字符(字母数字下划线)
    \W //非单词字符
    ^ //以什么开始,只有在[]里面^表示取反
    $ //以什么结束
    \b //单词边界
    \B //非单词边界

    • 量词
      • 匹配连续出现多次
        ?//出现0次或1次
        + //至少出现1次
        * //出现任意次
        {n} //出现n次
        {n,m} //出现n到m
        {n,} //至少出现n次
    • js正则贪婪模式和非贪婪模式
      • 正则表达式默认会尽可能多的去匹配
        '12345678'.replace(/\d{3,6}/g,'S') //得出'S78'
      • 让正则表达式尽可能少的匹配,一旦匹配成功不再继续尝试匹配就是非贪婪模式。做法就是在量词后面加上?
        '123456789'.match(/\d{3,5}?/g) //得出["123", "456", "789"]
    • 分组
      • 使用()可以达到使量词作用于分组
        'a1b2c3d4'.replace(/([a-z]\d){2}/g,'Ac') //得到"AcAc"
      • 或 (使用 | 可以达到或的效果)
        'carrfcaggty'.replace(/ca(rr|gg)/g,'BB') //得到'BBfBBty'
      • 反向引用
        //2015-12-25=>12/25/2015
        //只有在分组里,$1$2$3捕获分组
        '2015-12-25'.replace(/(\d{4})-(\d{2})-(\d{2})/g,'$2/$3/$1');
        //如果不希望某些分组被捕获,只要在分组内加上?:就可以
    • 前瞻
      • 正则表达式从文本头部像文本尾部开始解析,文本尾部方向,称为“前”。
      • 前瞻就是在正则表达式匹配到规则的时候,向前检查是否符合断言;后顾/后瞻方向相反
      • JavaScript不支持后顾
      • 符合和不符合特定断言称为肯定/正向匹配和否定/负向匹配
      •  'a2*3'.replace(/\w(?=\d)/g,'x')  //得出"x2*3"。
          //正向前瞻exp(?=assert)
          //负向前瞻exp(?!=assert)
          //前面是一个正则,后面是一个断言规则

    相关文章

      网友评论

        本文标题:归纳篇(二)正则表达式

        本文链接:https://www.haomeiwen.com/subject/hgatgttx.html