美文网首页
js中的正则表达式

js中的正则表达式

作者: 静简明 | 来源:发表于2018-07-07 21:44 被阅读0次

    1. js中实例化正则表达式对象

    var reg1 = /\d/;
    //等价于
    var reg2 = new RegExp("\\d\");
    // es6 新写法
    var reg3 = new RegExp(/\d/,"g");
    

    相关修饰符
    g: 表示全局搜索
    i: 表示忽略大小写搜索
    m: 表示多行搜索

    2. 正则表达式中的特殊字符

    非字母字符

    .  * + ? ^ | \ () {} []
    \t \v \n \r \0等
    

    字符类

    var reg = /ab/; // 表示匹配ab的正则表达式
    var reg1 = /[abc]/; // 表示one of a,b,c
    var reg2 = /[^abc]/; // 表示 none of a,b,c
    

    范围类

    var reg = /[a-d]/; // 表示a到d中间的任意一个字符
    

    预定义类

    预定义类
    边界字符
    边界字符
    量词
    量词

    3. 贪婪模式和非贪婪模式

    var reg0 = /\d{1,3}/; //贪婪模式,尽可能多的匹配
    // 与贪婪模式相比,正则表达式量词后加?
    var reg = /\d{1,3}?/; //非贪婪模式,尽可能少的匹配,一旦成功,就不再尝试
    

    4. 分组

    ()可以达到分组的效果,分组可以使量词作用于分组,而不仅仅作用于和量词最近的字符

    'a1w23e4r'.replace(/([a-z]\d){2}/g,'Q');// Q3e4r
    

    反向引用
    采用$加数字获取第1个分组,第2个分组。。。等的内容

    // 将2018-07-08换成 07/08/2018
    "2018-07-08".replace(/(\d{4})-(\d{2})-(\d{2})/g,'$2/$3/$1');
    

    忽略分组

    // 分组内最前面加?
    "2018-07-08".replace(/(?\d{4})-(\d{2})-(\d{2})/g,'$2/$3');
    

    5. 前瞻

    正则表达式在匹配到规则时,向前检查是否符合断言

    正则表达式是从左到右解析的,所以右边称为前
    javascript中不支持后顾,因此暂时不学

    // 正向前瞻 
    exp( ?= asert)
    "a2*efdfe3r4ef".replace(/\w(?=\d)/g,"Q"); // Q2*efdfQ3Q4ef
    // 负向前瞻
    exp( ?! asert )
    
    

    注:前瞻时候只匹配不包括断言部分的正则表达式

    6. RegExp.prototype.test(string)

    用于测试字符串是否符合正则表达式规则,符合返回true;不符合返回false;

    注:由于test方法中会从lastIndex位置开始匹配字符串,所以,对于全局搜索的返回结果可能不准

    var reg = /\w/g;
    reg.test("a");// true  对于同一个正则表达式对象而言,一开始lastIndex为0
    reg.test("a");// false  此时lastIndex为1,继续向后找,没找到返回false
    

    7. ExpReg.prototype.exec(string)

    使用正则表达式搜索字符串,找不到匹配项,返回null;找到匹配项,返回值为数组
    返回的数组中,第一个为匹配到的内容,后面依次为分组的内容,并且存在index属性为匹配文本的第一个字符的位置,input为被检索的字符串

    var reg = /\d/g
    

    对上面的正则表达式对象调用exec方法,会发现当全局搜索时,lastIndex会随着调用次数改变,和test方法存在一样的情况

    执行结果

    8. String.prototype.search(reg)

    检索字符串中指定的子字符串或者与正则表达式相匹配的子字符串,方法返回第一个匹配的结果的index,查找不到返回-1
    search方法不执行全局匹配,忽略标志g,总是从字符串的开始进行检索

    9. String.prototype.split(reg)

    10. String.prototype.replace(参数)

    第一种形式参数string, string
    第二种形式参数reg, string
    第三种形式参数reg, function

    对于第三种形式的参数中function的参数
    function ('匹配的字符串', '分组内容1', '分组内容2',..., '匹配项在字符串中的index', '原字符串')
    方法的返回值为要替换的结果

    "aabbccdd12343".replace(/(\w){2}\d/,function(str, group1,index,src){
      console.log(str);
      console.log(group1);
      console.log(index);
      console.log(src);
      return "Q";
    })
    
    运行结果

    11. 关于验证正则表达式

    根据regexper-static网站内容可以将验证正则表达式的项目安装到本地,进行验证

    本文目的仅仅是为了个人查找阅读等提供方便

    相关文章

      网友评论

          本文标题:js中的正则表达式

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