正则表达式RegExp

作者: 德坤丨 | 来源:发表于2017-03-29 21:12 被阅读95次

    正则表达式在许多编程语言中都具有重要得作用,学会立正则表达式对编程处理数据具有事半功倍的作用

    正则表达式得模式修饰符

    • 参数 | 含义
      ---- | ---
      i | 忽略大小写
      g | 全局匹配
      m | 多行匹配

    1.两种创建方式

    var  box =   new RegExp("box","i");
    var box =   /box/i;
    

    2.RegExp对象的方法

    • 方法 | 功能
      ---- | ---
      exec | 一个在字符串中执行查找匹配的RegExp方法,它返回一个数组(未匹配到则返回null)
      test | 一个在字符串中测试是否匹配的RegExp方法,它返回true或false。
      match| 一个在字符串中执行查找匹配的String方法,它返回一个数组或者在未匹配到时返回null。
      search| 一个在字符串中测试匹配的String方法,它返回匹配到的位置索引,或者在失败时返回-1。
      replace|一个在字符串中执行查找匹配的String方法,并且使用替换字符串替换掉匹配到的子字符串。
      split| 一个使用正则表达式或者一个固定字符串分隔一个字符串,并将分隔后的子字符串存储到数组中的String方法

    使用 new 运算符的 test 方法示例

    var pattern = new RegExp('box', 'i');
    var str = 'This is a Box!';
    alert(pattern.test(str));
    

    使用字面量方式的 test 方法示例

    
    var pattern = /box/i;
    var str = 'This is a Box!';
    alert(pattern.test(str));
    

    使用一条语句实现正则匹配

    alert(/box/i.test('This is a Box!')); //模式和字符串替换掉了两个变量
    

    使用 exec 返回匹配数组

    var pattern = /box/i;
    var str = 'This is a Box!';
    alert(pattern.exec(str)); //匹配了返回数组,否则返回 null
    

    使用 match 方法获取获取匹配数组

    var pattern = /box/ig;
    var str = 'This is a Box!,That is a Box too';
    alert(str.match(pattern));
    alert(str.match(pattern).length);    //查找到返回位置,否则返回-1
    
    PS:因为 search 方法查找到即返回,也就是说无需 g 全局
    

    使用 search 来查找匹配数据

    var pattern = /box/ig;
    var str = 'This is a Box!,That is a Box too';
    alert(str.search(pattern));
    

    使用 replace 替换匹配到的数据

    var pattern = /box/ig;
    var str = 'This is a Box!,That is a Box too';
    alert(str.replace(pattern, 'Tom'));   //将 Box 替换成了 Tom
    

    使用 split 拆分成字符串数组

    var pattern = / /ig;
    var str = 'This is a Box!,That is a Box too';
    alert(str.split(pattern));    //将空格拆开分组成数组
    

    字符类

    • 元字符/元符号 | 匹配情况
      ---- | ---
      . | 匹配除换行符以外得任意字符
      [a-z0-9] |匹配括号中的字符集中得任意字符
      [^a-z0-9]| 匹配任意不在括号中的字符集中得字符
      \d|匹配数字
      \D|匹配非数字 === [^0-9]
      \w|匹配字母数字以及下划线_
      \W|匹配非 字母数字以及以及下划线_
      \o|匹配null字符
      \b|匹配空格字符
      \f|匹配进制字符
      \n|匹配换行符
      \r|匹配回车字符
      \t|匹配制表符
      \s|匹配空白字符.空格。制表符和换行符
      \S| 匹配非 空白字符
      ^|行首匹配
      $|行尾匹配
      \A|只有匹配字符串开始处
      \b|匹配单词边界,单词在[]内时无效
      \B|匹配非单词边界
      \G| 匹配当前搜索得开始位置
      \Z|匹配字符串结束处或行尾
      this| where|匹配this或者where得任意一个

    • 记录符 | 匹配情况
      ---- | ---
      \1或者$1 |匹配第一个分组或者第一个分组内得内容
      \1或$1| 匹配第一个分组中得内容
      ? | 匹配0个或一个

    • |匹配0个或任意多个
    • |匹配至少一个
      (xyz)+ |匹配至少一个(xyz)
      x{m,n} | 匹配至少m个X,最多n个X

    贪婪与惰性 即是在贪婪匹配符后面加?号

    • 贪婪 | 惰性
      ---- | ---
    • | +?
      {n,m}| {n,m}?

    使用点元字符

    var pattern = /g..gle/;
    var str = 'google';
    alert(pattern.test(str));
    

    重复匹配

    var pattern = /g.*gle/;
    var str = 'google';
    alert(pattern.test(str));
    

    使用字符类匹配

    var pattern = /g[a-zA-Z_]*gle/;
    var str = 'google';
    alert(pattern.test(str));
    

    使用锚元字符匹配

    var pattern = /^google$/;
    var str = 'google';
    alert(pattern.test(str));
    

    /^从开头匹配,$从结尾开始匹配

    var pattern = /goo\sgle/;
    var str = 'goo gle';
    alert(pattern.test(str)); //\s 可以匹配到空格
    var pattern = /google\b/;
    var str = 'google';
    alert(pattern.test(str)); //\b 可以匹配是否到了边界
    

    使用或模式匹配

    var pattern = /google|baidu|bing/;
    var str = 'google';
    alert(pattern.test(str));
    

    使用分组模式匹配

    var pattern = /(google){4,8}/;
    var str = 'googlegoogle';
    alert(pattern.test(str));    //匹配分组里的字符串 4-8 次
    
    var pattern = /8(.*)8/;     //获取 8..8 之间的任意字符
    var str = 'This is 8google8';
    str.match(pattern);
    alert(RegExp.$1);           //获取 8..8 之间的任意字符
    

    贪婪

    var pattern = /8(.*)8/;
    var str = 'This is 8google8';
    var result = str.replace(pattern,'<strong>$1</strong>');  //得到替换的字符串输出
    document.write(result);
    
    var pattern = /(.*)\s(.*)/;
    var str = 'google baidu';
    var result = str.replace(pattern, '$2 $1');  //将两个分组的值替换输出
    document.write(result);
    

    使用前瞻捕获

    var pattern = /(goo(?=gle))/;            //goo 后面必须跟着 gle 才能捕获
    var str = 'google';
    alert(pattern.exec(str));
    

    使用分组嵌套

    var pattern = /(A?(B?(C?)))/;    //从外往内获取
    var str = 'ABC';
    alert(pattern.exec(str));  //abc,abc,bc,a
    

    四.常用的正则
    1.检查邮政编码

    var pattern = /[1-9][0-9]{5}/;   //共 6 位数字,第一位不能为 0
    var str = '224000';
    alert(pattern.test(str));
    

    2.检查文件压缩包

    var pattern = /[\w]+\.zip|rar|gz/;    //\w 表示所有数字和字母加下划线
    var str = '123.zip';                 //\.表示匹配.,后面是一个选择
    alert(pattern.test(str));
    //\w 表示所有数字和字母加下划线
    //\.表示匹配.,后面是一个选择
    

    3.删除多余空格

    var pattern = /\s/g;
    var str = '111 222 333';
    var result = str.replace(pattern,'');  //把空格匹配成无空格
    alert(result);
    

    4.删除首尾空格

    var pattern = /^\s+/;         //强制首
    var str = 'goo gle '
    var result = str.replace(pattern, '');
    pattern = /\s+$/;            //强制尾
    result = result.replace(pattern, '');
    alert('|' + result + '|');
    

    参考文档
    javascriptMDN
    李炎恢javascript高级教程

    相关文章

      网友评论

        本文标题:正则表达式RegExp

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