美文网首页
正则表达式用法记录

正则表达式用法记录

作者: Oldboyyyy | 来源:发表于2017-03-14 17:54 被阅读0次

    正则是干什么的

    正则是一种规则,用来匹配和捕获字符串的规则。

    正则的规则

    • 元字符
    元字符 对应说明
    . 匹配除换行符之外的任意字符
    \w 匹配字母数字下划线,等同于:[a-zA-Z0-9_]
    \s 匹配任意空白符
    \d 匹配数字,等同于[0-9]
    \b 匹配单词边界
    ^ 匹配字符串的开始
    $ 匹配字符串的结束
    > 还有一个 或匹配,如 /x y/ 正则可匹配x或y两个字符(ps: 与markdown的表格语法冲突)
    • 反义字符
    反义字符 对应说明
    [^x] 匹配除“x”之外的所有字符,其中“x”可以为任意字符
    [^zyx] 同上,匹配除“x、y、z”之外的任意字符
    \W 匹配除了字母、数字、下划线之外的所有字符,等同于:[^\w]
    \S 匹配除空白符之外的任意字符,等同于:[^\s]
    \B 匹配不是单词边界的字符,等同于:[^\b]
    \D 匹配不是数字的所有字符,等同于:[^\d]
    • 转义字符
    转义字符 对应说明
    \xnn 匹配十六进制数
    \f 匹配换页符,等同于:\x0c
    \n 匹配换行符,等同于:\x0a
    \r 匹配回车符,等同于:\x0d
    \t 匹配水平制表符,等同于:\x09
    \v 匹配垂直制表符,等同于:\x0b
    \unnnn 匹配Unicode字符,如:\u00A0
    • 重复匹配
    匹配字符 对应说明
    * 重复出现零次或多次
    + 重复出现一次或多次
    ? 重复出现零次或一次
    {n} 重复出现n次
    {n,} 至少重复出现n次
    {m,n} 重复重现m到n次,其中,m<n
    • 分组/捕获
    分组字符串 对应说明
    (exp) 用小圆括号进行分组,如日期中年月日的分组:/(\d{5})-(\d{1,2})-(\d{1,2})/每个分组将产生分组号,从第一个括号开始,可以使用\n的形式在正则中使用分组号,如匹配成对出现的HTML标签,可以写成:/<(\w+)></\1>/
    (?:exp) 匹配exp正则,但不产生分组号
    exp1(?=exp2) 前瞻断言,匹配exp1,但后面必须是exp2如匹配名字叫xianlie,但不姓zhao的人:/zhao(?=xianlie)/
    exp1(?!=exp2) 后瞻断言,匹配exp1,但后面不能是exp2如匹配姓zhao,但名字不叫xianlie的人:/zhao(?!xianlie)/
    • 贪婪与惰性
    相关字符 对应说明
    *? 重复任意次,但尽可能少的重复
    +? 重复一次或多次,但尽可能少的重复
    ?? 重复零次或一次,但尽可能少的重复
    {m,n}? 重复m到n次,但尽可能少的重复
    {n,}? 重复n次以上,但尽可能少的重复
    {n}? 重复n次,但尽可能少的重复
    • 修饰符
    修饰符 对应说明
    i ignoreCase的缩写,表示忽略字母的大小写
    m multiline的缩写,更改^和$的含义,使它们分别在任意一行的行首和行尾匹配,而不仅仅在整个字符串的开头和结尾匹配。(在此模式下,$的精确含意是:匹配\n之前的位置以及字符串结束前的位置.)
    g global的缩写,进行全局匹配,即对字符串进行全文匹配,直到字符串遍历束

    如任何创建正则表达式

    1. 字面量创建
    var reg = /\w/
    
    1. 实例方式创建
    var reg = new RegExp('/\w/')
    

    两者的区别
    假设现在需要动态匹配字符串,也就是匹配的内容不固定。

    var name = 'iceman';
    var reg = /^\d+"+name+"\d+$/;
    console.log(reg.test('2015iceman2016')); // false
    console.log(reg.test('2015"""nameeee"2016')); // true
    
    var name = 'iceman';
    var reg = new RegExp("^\\d+" + name + "\\d+$", "g");
    console.log(reg.test('2015iceman2016')); // true
    
    1. 字面量方式中出现的一切都是元字符,不能进行变量值的拼接,而实例创建的方式可以;
    1. 字面量方式中直接写\d可以,而在实例中需要把它转义 \d

    正则用法

    1. 匹配一字母开头,数字的结尾的任意字符串
    var reg = /^[a-z].\d$/;reg.test('a551') //false 中间只能有一个任意字符
    var reg = /^[a-z].\d$/;reg.test('a55') //true
    var reg = /^[a-z].*\d$/;reg.test('a5sdsd5') // true *代表中的部分重复出现零次或多次
    var reg = /^[a-z|A-Z].*\d$/;reg.test('a5sdsd5') //true
    var reg = /^[a-z|A-Z].*\d$/;reg.test('A5sdsd5') //true
    var reg = /^[a-z].*\d$/i;reg.test('A5sdsd5') // true 修饰词i,忽略大小写
    
    1. 匹配有效数字,正负数,整数,小数,零
    /^[+-]?(\d|([1-9]\d+))(\.\d+)?$/.test('1.')//fale
    
    1. 匹配18-56的数字
    /^([1][8-9]|[2-4]\d)|[5][0-6]$/.test('25') //true
    
    1. exec方法

    正则表达式默认有一个lastIndex字段,该字段是正则每一次捕获时,在字符串中开始查询的位置,默认的值是0;

    console.log(/([1][8-9]|[2-4]\d)|[5][0-6]/.exec('aaaa25cccc'));
    //["25", "25", index: 4, input: "aaaa25cccc"]
    

    exec方法会返回一个数组

    • 数组第一项是正则匹配到的字符串
    • 有一个index项,捕获字符串的索引位置
    • 有一个input项,捕获的原字符串
    1. match方法

    把所有的符合的匹配的字符串获取到

    'aaaa25cccc35'.match(/([1][8-9]|[2-4]\d)|[5][0-6]/g);
    //["25", "35"]
    
    1. replace 方法
    var str = '今年是2017年';
    var ary = ['零', '壹', '贰', '叁', '肆', '伍', '陆','柒', '捌', '玖', '拾'];
    str = str.replace(/\d/g, function () {
        /*
         * 第一次执行:大正则捕获的是2,返回的是ary[2] --> '贰'
         * 第二次执行:大正则捕获的是0,返回的是ary[0] --> '零'
         * .....
         */
        return ary[arguments[0]];
    });
    console.log(str);
    

    参考文章

    1.正则详解及实战(JavaScript)
    2.2017百度前端技术学院- 正则表达式之入门

    相关文章

      网友评论

          本文标题:正则表达式用法记录

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