了解正则表达式

正则表达式(Regular Expression)

  • 正则表达式: 也叫规则表达式,按照一定的规则组成的一个表达式,简写(regex、regexp或RE)
    • 作用: 主要是匹配字符串.(在大多数编程语言中都可以使用)
    • 组成: 是由元字符或者是限定符组成的一个式子
元字符
  • . 表示的是: 除了\n以外的任意的一个字符 "fsdas"
  • [] 表示的是: 范围
    • [0-9] 表示的是0到9之间的任意的一个数字
    • [100-200]是错误的 得用[1][0-9][0-9]
    • [a-z] 表示的是:所有小写的字母中的任意一个
    • [A-Z] 表示的是:所有大小的字母中的任意一个
    • [a-zA-Z] 表示的是: 所有的字母中的任意一个
    • [0-9a-zA-Z] 表示的是: 所有的数字或者是字母中的一个
    • [] 另一个含义: 把正则表达式中的元字符的意义干掉 [.]
  • | 表示的是: 或者
    • [0-9]|[a-z] 表示的要么是一个数字,要么是一个小写的字母
  • () 表示的是: 分组 提升优先级
    • [0-9]|([a-z])|[A-Z] 先算小括号里面的
    • ([0-9])([1-5])([a-z]) 三组,从最左边开始计算

--------都是元字符,下面这些也可以叫限定符(限定前面的表达式出现的次数)

    • 表示的是: 前面的表达式出现了0次到多次
    • [a-z][0-9]* 小写中的任意一个 后面是要么没有数字的,要么是多个数字的. 例如"fadwa2323"
    • 表示的是: 前面的表达式出现了一次到多次
    • [a-z][9]+ 小写字母一个后面最少一个9,或者多个9 例如"fasd99adasd"
  • ? 表示的是: 前的表达式出现了0次到1次,最少是0次,最多1次,另一个含义: 阻止贪婪模式
    • [4][a-z]? "1234ij"
  • {} 表示的是: 更加明确前面的表达式出现的次数
    • {0,} 表示的是前面的表达式出现了0次到多次,和*一样
    • {1,} 表示的是前面的表达式出现了1次到多次,和+一样
    • {0,1} 表示的是前面的表达式出现了0次到1次,和?一样
    • {5,10} 表示的是前面的表达式出现了5次到10次
    • {4} 表示的是前面的表达式出现了4次
    • {,10} 错误的写法=======================
  • ^ 表示的是以xxx开始,或者是取非(取反)
    • ^[0-9] 以数字开头
    • ^[a-z] 以小写字母开始
    • [^0-9] 取反,非数字
    • [^a-z] 非小写字母
    • [^0-9a-zA-Z_] 特殊符号(_不是特殊符号)
  • $ 表示的是以xxx结束
    • [0-9][a-z]$ 必需以小写字母结束(一个字母一个数字结束)
    • ^[0-9][a-z]$ "4f"(相当于严格模式下必需是一个数字一个字母)
    • ^[0-9][a-z] "3f231d" (一个字母一个数字开头) --------------------- 限定分割线
  • \d 数字中的任意一个
  • \D 非数字中的一个
  • \s 空白符中的一个 " "
  • \S 非空白符
  • \w 非特殊符号 等价于[A-Za-z0-9_]
  • \W 特殊符号 等价于[^A-Za-z0-9_]
  • \b 单词的边界.一个词的边界就是一个词不被另外一个“字”字符跟随的位置或者没有其他“字”字符在其前面的位置。
    • /\bm/匹配“moon”中的'm'
    • /oo\b/并不匹配"moon"中的'oo',因为'oo'被一个“字”字符'n'紧跟着。
  • \t tab键 水平制表符
  • \ 转义字符 在非特殊字符之前的反斜杠表示下一个字符是特殊的
    • 反斜杠也可以将其后的特殊字符,转义为字面量.

-----------------------分割线

正则表达式练习
  • 找规律 不要追求完美
  • 身份证的正则表达式
    • 15位或者18位 : ([1-9][0-9]{14})|([1-9][0-9]{16}[0-9xX ]) 或者 ([1-9][0-9]{14})([0-9]{2}[0-9xX])?
  • 座机号码的正则表达式
    • 010-19876754或者0431-87123490: [0-9]{3,4}[-][0-9]{8} 或者 \d{3,4}[-]\d{8}
  • qq号码的正则表达式
    • 5位到11位: \d{5,11} 或者 [1-9][0-9]{4,11}
  • 手机的正则表达式
    • 130-139 143 147 150-159 170 171 173 176 177 180-189 : ([1][358][0-9]{8})|([1][4][37][0-9]{8})|([1][7][01367][0-9 ]{8})
  • 邮箱的正则表达式,必须要记住的 [0-9a-zA-Z_.-]+[@][0-9a-zA-Z_.-]+([.][a-zA-Z]+){1,2}

JS创建正则表达式对象
  • 创建方式: (正则表达式的作用:匹配字符串的) 1.通过构造函数创建对象

        var reg = new RegExp(/\d{5}/); RegExp();//对象创建完毕--没有正则表达式的对象
        //调用方法验证字符串是否匹配
        var flag = reg.test("我的电话是10086");
        console.log(flag);//true
        
    复制代码

    2.通过字面量方式创建对象

        var reg = /\d{1,5}/;
        var flag = reg.test("我的幸运:888");
        console.log(flag);//true
    复制代码
  • 正则表达式中:

    • g 表示的是全局模式匹配
    • i 表示的是忽略大小写
  • 正则提取

    • stringObject.match() 方法可在字符串内检索指定的值,或找到一个或多个正则表达式的匹配。
    • 正则表达式中的()作为分组来使用,获取分组匹配到的结果用Regex.$1 $2 $3....来获取
        // 1. 提取工资
        var str = "张三:1000,李四:5000,王五:8000。";
        var array = str.match(/\d+/g);
        console.log(array);
        
        // 2. 提取email地址
        var str = "123123@xx.com,fangfang@valuedopinions.cn 286669312@qq.com 2、emailenglish@emailenglish.englishtown.com 286669312@qq.com...";
        var array = str.match(/\w+@\w+\.\w+(\.\w+)?/g);
        console.log(array);
        
        // 3. 分组提取  
        // 3. 提取日期中的年部分  2015-5-10
        var dateStr = '2016-1-5';
        // 正则表达式中的()作为分组来使用,获取分组匹配到的结果用Regex.$1 $2 $3....来获取
        var reg = /(\d{4})-\d{1,2}-\d{1,2}/;
        if (reg.test(dateStr)) {
          console.log(RegExp.$1);
        }
        
        // 4. 提取邮件中的每一部分
        //-----/([0-9a-zA-Z_.-]+)[@]([0-9a-zA-Z_-]+)(([.][a-zA-Z]+){1,2})/-------
        var reg = /(\w+)@(\w+)\.(\w+)(\.\w+)?/;
        var str = "123123@xx.com";
        if (reg.test(str)) {
          console.log(RegExp.$1);
          console.log(RegExp.$2);
          console.log(RegExp.$3);
        }
    复制代码
  • 正则替换

        // 1. 替换所有空白
        var str = "   123AD  asadf   asadfasf  adf ";
        str = str.replace(/\s/g,"xx");
        console.log(str);
        
        // 2. 替换所有,|,
        var str = "abc,efg,123,abc,123,a";
        str = str.replace(/,|,/g, ".");
        console.log(str);
        
        //3. 替换空格
        var str = "  哦买噶的    ,太幸福了  ";
        str = str.replace(/\s+/g, "");
        console.log("===" + str + "===");
        
        //所有的h都替换成S
        var str="HhpphH";//SSppSS
        str=str.replace(/[h]/gi,"S");
        console.log(str);
    
    复制代码
  • 正则表达式的方法

    • 正则表达式对象.exec(字符串); 需要遍历一个个提取出来(与字符串对象.match方法()一样)
        //    var str = "中国移动:10086,中国联通:10010,中国电信:10000";
        //    var reg=/\d{5}/g;
        //    //通过正则表达式匹配这个字符串
        //    var array=reg.exec(str);
        //    console.log(array);
        //    console.log(reg.exec(str));
        //    console.log(reg.exec(str));
        //    console.log(reg.exec(str));//null
        
        var str = "中国移动:10086,中国联通:10010,中国电信:10000";
        var reg=/\d{5}/g;
        //通过正则表达式匹配这个字符串
        var array=reg.exec(str);
        while (array!=null){
          //输出匹配的内容
          console.log(array[0]);
          array=reg.exec(str);
        }
    
    复制代码
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值