正则表达式

本文最后更新于:8 个月前

正则概述

正则表达式用于定义一些字符串的规则,计算机可以根据正则表达式,来检查一个字符串是否符合规则,获得将字符串中符合内容提取出来
使用typeof检查正则对象,会返回object

创建正则对象

  • 使用对象创建
    匹配模式:
    i:忽略大写写
    g:匹配全局模式
    ig:忽略大小写且全局匹配模式
    m:执行多行匹配

    1
    2
    3
    4
    const reg=new RegExp("ab","i")
    let str="aBc"
    let result=reg.test(str)
    console.log(result)
  • 使用字面量创建

    1
    2
    3
    let str="aBc"
    let reg1=/ab/i
    console.log(reg1.test(str))

    注意可以为一个正则表达式设置多个匹配模式,顺序无所谓

    正则进阶

  • 需求信息:创建一个正则表达式,检查一个字符串中是否含有a或b

  • 语法格式:使用|表示或者的意思

    1
    2
    3
    4
    5
    6
    7
    /* 
    需求:创建一个正则表达式,检查一个字符串中是否含有a或b
    */
    const reg=/a|b|c/
    let str="aBc"
    let result=reg.test(str)
    console.log(result)
  • 那么我们如何检查一个字符串中是否含有小写字母或字母呢

  • 这里我们就有一个需求创建一个字符表达式,检查字符串中是否含有字母

  • 提示:常见组合:
    [a-z]:任意小写字母
    [A-Z]:任意大写字母
    [A-z]:任意字符
    [0-9]:任意数字

    1
    2
    3
    4
    const reg1=/[A-z]/
    let str1="12a"
    let result1=reg1.test(str1)
    console.log(result1)
  • 需求信息:创建一个正则表达式,检查字符串中是否除了数字还有其他字母

    1
    2
    3
    4
    const reg2=/[^0-9]/
    let str2="12abc"
    let result2=reg1.test(str2)
    console.log(result2)

    正则方法

    这些正则方法其实都是字符串的方法,只不过将正则表达式作为参数。

  • split()方法:这个方法可以将一个字符串分为一个数组,方法中可以传递一个正则表达式作为参数,方法会根据正则表达式,来拆分字符串,并且是全局匹配

    1
    2
    3
    var str = "1a2b3c4d5e6f7";
    var result = str.split(/[A-z]/);
    console.log(result);
  • search方法:这个方法可以搜索字符串中是否含有指定的内容,如果搜索到指定的内容,则返回第一次出现的索引,如果没有查到就返回-1,并且这个方法只会查找第一个,即使正则表达式加上了全局匹配也没用

    1
    2
    3
    var str = "hello abc hello aec afc";
    var result = str.search(/a[bef]c/);
    console.log(result);
  • match()方法:可以根据正则表达式,从一个字符串中将符合条件的内容提取出来,默认情况下只要找到第一个符合要求的内容后,就会停止检索。但是我们可以向正则表达式中设置全局匹配,这样就可以匹配全部的内容

    1
    2
    3
    var str = "1a2a3a4a5e6f7A8B9C";
    var result = str.match(/[a-z]/ig);
    console.log(result);
  • replce()该方法会传入两个参数,第一个为正则表达式,第二个为替换内容,将正则表达式匹配的内容替换,默认只会替换第一个,同理我们也可以设置全局匹配

    1
    2
    3
    var str = "1a2a3a4a5e6f7A8B9C";
    var result = str.replace(/[a-z]/gi, "@_@");
    console.log(result);

    正则量词

  • 通过量词可以设置一个内容出现的次数,量词只对它前边的一个内容起作用,如果有多个内容可以使用 () 括起来,常见量词如下:
    {n} :正好出现n次
    {m,} :出现m次及以上
    {m,n} :出现m-n次
    + :至少一个,相当于{1,}
    * :0个或多个,相当于{0,}
    ? :0个或1个,相当于{0,1}

  • 如果我们要检查或者说判断是否以某个字符或者字符序列开头或者结尾就会使用^和$。
    ^ :表示开头,注意它在[^字符序列]表达的意思不一样
    $ :表示结尾

  • 那如果我们想要检查一个字符串中是否含有.和\就会使用转义字符
    . :表示.
    \ :表示
    注意:使用构造函数时,由于它的参数是一个字符串,而\是字符串中转义字符,如果要使用\则需要使用\来代替

    除了以上两种特殊的字符,其实还有很多如下所示:
    \w :任意字母、数字、,相当于[A-z0-9]
    \W :除了字母、数字、,相当于[^A-z0-9]
    \d :任意的数字,相当于[0-9]
    \D :除了任意的数字,相当于[^0-9]
    \s :空格
    \S :除了空格
    \b :单词边界
    \B :除了单词边界

正则实例

用户正则

1
2
//⽤户名正则,4到16位(字母,数字,下划线,减号)
uPattern = /^[a-zA-Z0-9_-]{4,16}$/

密码强度正则

1
2
//密码强度正则,最少6位,包括⾄少1个⼤写字母,1个⼩写字母,1个数字,1个特殊字符
pPattern = /^.*(?=.{6,})(?=.*\d)(?=.*[A-Z])(?=.*[a-z])(?=.*[!@#$%^&*? ]).*$/

手机号正则

1
mPattern = /^((13[0-9])|(14[5|7])|(15([0-3]|[5-9]))|(18[0,5-9]))\d{8}$/

身份证号正则

1
cP = /^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/

车牌号正则

1
cPattern = /^[京津沪渝冀豫云辽⿊湘皖鲁新苏浙赣鄂桂⽢晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}[A-Z0-9]{4}[A-Z0-9挂学警港澳]{1}$/

本博客所有文章除特别声明外,如需转载或引用,请注明出处!