了解正则表达式

正则表达式(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]) 三组,从最左边开始计算

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

    • 表示的是: 前面的表达式出现了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键 水平制表符
  • \ 转义字符 在非特殊字符以前的反斜杠表示下一个字符是特殊的
    • 反斜杠也能够将其后的特殊字符,转义为字面量.

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

正则表达式练习
  • 找规律 不要追求完美
  • 身份证的正则表达式
    • 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
    复制代码
  • 正则表达式中:bash

    • 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 二、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);
    
    复制代码
  • 正则表达式的方法ui

    • 正则表达式对象.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);
        }
    
    复制代码
相关文章
相关标签/搜索