一篇文章教会你写所有的正则表达式!

490 阅读4分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第10天,点击查看活动详情

整理中正则表达式中常用的知识点......

正则表达式的定义

正则表达式:也被称为规则表达式,它是由一些普通字符和特殊字符(也称为元字符)构成的表达式。

它的作用是用来验证字符串是否符合格式要求,或者判断字符串中是否包含指定格式的子串。

  • 1.字面量形式创建正则表达式:var 正则表达式名称 = /表达式内容/修饰符
  • 2.利用构造方法创建正则表达式:var 正则表达式名称 = new RegExp('表达式内容', '修饰符')
  • 3.test方法
    • 作用:该方法的作用是用来判断字符串是否符合正则表达式的格式要求,如果符合格式要求,返回true、否则返回false
    • 格式:正则表达式.test(字符串)

正则表达式的构成

正则表达式的构成:普通字符、特殊字符。

普通字符:字母、数字、_等

特殊字符(元字符):

  1) 定位符
            ^:表示以某个字符开头
            $:表示以某个字符结尾
            
            注意:如果正则表达式中既有^也有$符号,那么在匹配时无论是内容还是字符的个数都要匹配

  2) 数量
            *:表示它前面的字符的个数为0到无穷多个
            +:表示它前面的字符的个数为1到无穷多个
            ?:表示它前面的字符的个数为01个
            {n}:表示它前面的字符的个数有且只能有n个
            {n,m}:表示它前面的字符的个数为n-m个,包含n和m
            {n,}:表示它前面的字符的个数为大于等于n个

  3) 转义字符
            \d:表示所有的数字,即0-9间的任意一个数字
            \D:表示一个非数字的字符
            \w:表示任意的一个字母、数字、下划线
            \W:表示除了字母、数字、下划线之外的任意一个字符
            \s:表示任意一个空白符,如空格
            \S:表示除了空白符的任意字符

   4) 备选字符集
            [选项1选项2选项3]:表示字符串中只要匹配该备选字符集中的任意一个即可
            [选项1-选项n]:表示选项1到选项n间的任意一个字符
            [^选项1选项2选项3]:除了选项1选项2选项3之外的任意字符

   5)分组和选择
            ():表示分组
            |:表示或的意思

   6)其它
            .:点表示除了\n之外的任意字符
            [\u4e00-\u9fa5]:表示任意的一个汉字
            \b:匹配单词的边界,注意:所谓单词就是指字母、数字、下划线形成的连续字符
            \B:匹配单词的非边界

举例:

将字符串str转换为数组,以数字作为分隔符

       var str = 'he1ll2owo3rl4d';
       var arr = str.split(/\d/);
       console.log(arr); // ['he', 'll', 'owo', 'rl', 'd']

正则表达式的修饰符

- i:忽略大小写
- g:全局匹配
- ig:既忽略大小写,也全局匹配
        var reg = /a/i;
        console.log(reg.test('Abc')); // true
        
        var reg = /a/g;
        console.log('abcaAbc'.match(reg)); // ['a', 'a']
        
        var reg = /a/gi;
        console.log('abcaAbc'.match(reg)); // ['a', 'a', 'A']

exec方法

  1. 作用:该方法是正则表达式对象的一个方法,可以利用这个方法在字符串中检索是否有和该正则表达式匹配的子串,如果有,则返回,有点类似于字符串中的match方法;
  2. 格式:正则表达式.exec(字符串);
        var str = 'abcabcabc';
        var reg = /a/g;
        var res = reg.exec(str);
        console.log(res); // ['a', index: 0, input: 'abcabcabc', groups: undefined]

什么是贪婪模式和懒惰模式

  1. 贪婪模式:如果正则表达式中有表示数量的特殊符号,如*、+、{n,m}等,在匹配时会尽可能多的匹配字符;
  2. 懒惰模式:如果正则表达式中有表示数量的特殊符号,如*、+、{n,m}等,在匹配时会尽可能少的匹配字符。如果要将贪婪模式改为懒惰模式只需要在数量词后面加?。

image.png

常见正则表达式

  1. 邮政编码:由6个数字构成,第一位不可以是0
  var reg = /^[1-9]\d{5}$/;
  1. 手机号码:由13/15/17/18开头的11位数字
  var reg = /^1[3578]\d{9}$/;
  1. QQ号:第一位不可以是0,位数在5-12位的数字构成
  var reg = /^[1-9]\d{4,11}$/;
  1. 检查是否是压缩文件:文件名由字母、数字、下划线构成,不可以以数字开头,后缀为.zip/rar/gz
  var reg = /^[a-zA-Z_]\w*\.(zip|rar|gz)$/;
  1. 密码:字母、数字、下划线构成,6-20位
  var reg = /^\w{6,20}$/;
  1. 用户名:字母、数字、下划线构成,6-16位,不能以数字开头
  var reg = /^[a-zA-Z_]\w{5,15}$/;
  1. 输入年龄:只能在18-40间
  var reg = /^1[89]$|^[23][0-9]$|^40$/;
  1. 身份证号码:15或18位,如果是15位则全部为数字,如果是18位,前17位为数字,第18位为数字或字母x,字母不区分大小写
  var reg = /^\d{15}$|^\d{17}[\dxX]$/;
  1. 中文名字:三个汉字、中间必须是小或晓【[\u4e00-\u9fa5]表示任意一个汉字】
  var reg = /^[\u4e00-\u9fa5][小晓][\u4e00-\u9fa5]$/;