正则表达式语法

一、定义
    正则表达式(Regular Expression),使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。
    
二、基本语法

    元字符
    正则表达式中有特殊含义的非字母字符
    
    字符类
    [] 可以构建一个类,比如 [abc], 匹配含有 a 或 b 或 c
    字符类取反
    [^] 表示匹配一个未列出的字符,而不是匹配列出的字符
        var reg = /[^ab]/g;
        var string = "acdadbb";
        string.replace(reg, "A"); // 结果为"aAAaAbb"
    
    范围类
    [], 匹配一个范围,在其类内部是可以连写的,例如
    [a-zA-z] // 匹配26个字母的大小写
    
    预定义类
        1、 . 匹配除回车符合换行符之外的所有字符
        2、 \d匹配数字字符
        3、 \D匹配非数字字符
        4、 \s匹配空白符
        5、 \S匹配非空白符
        6、 \w匹配单词字符(字符、数字下划线)
        7、 \W匹配非单词字符
        注意大小写区分
    
    边界
        1、 ^ 开始
        2、 $ 结束
        3、 \b单词边界
        4、 \B非单词边界
    
    量词
        1、 ? 匹配之前紧邻的元素,这个元素可以不出现,且匹配成功(最多出现一次)
        2、 + 表示之前紧邻的元素出现一次或者多次,无法进行一次匹配时,会报告匹配失败(最少出现一次)
        3、 * 表示之前紧邻的元素任意出现多次或者不出现字符组里面的一些字符不是元字符。(任意次)
        4、 {n} 出现 n 次
        5、 {n, m} 出现 n 到 m 次
        6、 {n, } 至少出现 n 次
        
    分组
    
    1、 ()
        // 匹配一个字母加一个数字的前两个组合
        var reg1 = /[a-z]\d{2}/g;
        var reg2 = /([a-z]\d){2}/g; //增加()
        var string = "a1c2d3adbb";
        string.replace(reg1, "A"); // 结果为"a1c2d3adbb", 没有改变
        string.replace(reg2, "A"); // 结果为"Ad3adbb"
    
    2、 或 |
        var reg = /h(o|i)t/g;
        var string = "hothithat";
        string.replace(reg, "A"); // 结果为AAhat
    
    3、 反向引用
        例如日期格式的转换,由2016-08-16转换为08/16/2016
        var reg = /(\d{4})-(\d{2})-(\d{2})/g;
        var string = "2016-08-16"
        string.replace(reg, "$2/$3/$1"); // 结果为08/16/2016
        
        其中 $1 表示第一组括号匹配的文本,其他类似
        
    4、忽略分组
        在分组上加上 ?:
        var reg = /(\d{4})-(?:\d{2})-(\d{2})/g;
        var string = "2016-08-16";
        string.replace(reg, "$2/$3/$1"); // 结果为16/$3/2016, 月份已经被忽略,无法通过$数字进行访问
    
    前瞻
        本文尾部方向,为 前
        正向前瞻:exp(?=assert)
        负向前瞻:exp(?!assert)
        
        前瞻:匹配到规则的时候,向前检查是否符合断言,JavaScript不支持后顾
            var reg = /\w(?=\d)/g; // 找到字母后,判断是不是有数字,有的话才符合,替换掉这个字母,但是数字不会替换
            var string = "h2othi2";
            string.replace(reg, "A"); // 结果为A2othA2
            
三、匹配模式
    
    贪婪模式
    
        极可能多的匹配
        var reg = /\d{3, 6}/g;
        var string = "123456789";
        string.replace(reg, "A"); // 结果为A789,尽可能多匹配
    
    非贪婪模式
        让正则表达式尽可能少的匹配,一旦匹配成功就不再继续尝试。方式是在量词后加上?
        var reg = /\d{3, 6}?/g;
        var String = "123456789";
        string.replace(reg, "A"); // 结果为 "AAA", 尽可能少匹配

四、RegExp 对象

    创建方法
    有两种方法可以创建RegExp对象
    a、显示构造函数
        var reg = new RegExp("patern"[, "flag"]);
    b、隐式构造函数
        var reg = /pattern/[flags];
    其中, flags可以是一些标志字符的组合
        g 为全局标志,将对所有匹配的部分起作用,如果不设置,仅搜索和替换最早匹配的内容
        i 为忽略大小写的标志,如果设置,忽略大小写
        m 为多行标志,如果设置, "^"还可以与被搜索字符串的 n 或 r 之后的位置进行匹配
    例如:
        /ab+c/i;
        new RegExp("ab+c", "i");
    
    RegExp对象的属性
        global: 布尔值
        ignoreCase: 布尔值
        lastIndex: 整数,表示开始搜索下一个匹配项的字符位置
        multiLine: 布尔值
        source: 正则表达式的字符串表示
    
    RegExp对象的方法
        exec
            rgExp.exc(str)
            返回值:如果没有找到匹配返回null,如果找到返回一个数组
            返回的数组有三个属性,分别是input、index 和 lastIndex
            input 包含了查找的字符串,
            index 属性包含了整个被查找字符串中被匹配的字符串的位置,
            lastIndex 属性中包含了最后一次匹配中最后一个字符的下一个位置
            
        test
            rgexp.test(str)
            返回值:如果存在一个模式,返回true
            
        match
            stringObj.match(rgExp)
            返回值:如果没有找到匹配返回null,如果找到则返回一个数组
            返回数组有三个属性,分别是input、index 和 lastIndex
            input 包含了查找的字符串,
            index 属性包含了整个被查找字符串中被匹配的字符串的位置,
            lastIndex 属性中包含了最后一次匹配中最后一个字符的下一个位置
        
        search
            stringObj.search(rgExp)
            返回值:如果存在返回一个整数值,指明这个匹配距离字符串开始的偏移位置。没有找到则返回 -1
        
        replace
            replace(rgExp, replaceText)
        
        split
            split([separator[, limit]])
            separator 分割标识符参数,可以是多个字符或一个正则表达式 limit限制返回元素的个数

文章摘自:https://segmentfault.com/a/1190000006546392

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值