• JS -正则表达式


    正则表达式

    关于正则表达式,其实我写过几篇了,但是真正的正则表达式其实主要用于定义一些字符串的规则,计算机根据给出的正则表达式,来检查一个字符串是否符合规则。
    我们来看一下,在JS中如何创建正则表达式对象。

    语法

    第一种创建方式

    var 变量 =  new RegExp("正则表达式", "匹配模式");
    
    • 1

    记得在使用typeof检查正则对象会返回一个Object对象。第二个参数有两个特殊的值:
    i 忽略大小写 例如 : var reg= new RegExp("a","i"); = var reg2=/a/i;
    g 全局匹配模式

    例如:

        var reg = new RegExp("a");//这个正则表达式可以用来检查一下字符串中是否含有a,正则表达式中区分大小写字母
        console.log(typeof reg);
        var str="azdaszxc";
        var result =reg.test(str);
        console.log(result);//结果输出是true,即符合表达式
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在这里插入图片描述

    第二种创建方式

    使用正则表达式字面量,将正则表达式包含在斜杠/ 中。

    let regex = /pattern/;
    
    • 1

    例如:

    /*
         *var 变量 = new RegExp("正则表达式","匹配模式");
         *var 变量=/正则表达式/匹配模式
         */
        var reg= new RegExp("a","i");
        console.log(reg.test("abc"));
        var reg2=/a/i;
        console.log(reg2.test("abc"));
        //这两种方法都是一样的效果
    
        //创建一个正则表达式,检查一个字符串中是否有a或者b
        //使用|表示或者的意思 例如/a|b/,里面可以加入多个|,不局限于数量
        var reg3=/a | b/i;
        console.log(reg.test("wea"));
    
        //创建一个正则表达式检查一个字符串中是否有字母
        //笨办法1  var reg=/a|b|c|d|e|f|g|h|i|j|k等等/i
        //笨办法2 var reg=/[abcdefg等等]/i 这样也表示a或者b或者c等等
        //[a-z]任意小写字母
        //[A-Z]任意大写字母
        //[A-z]任意字母
        //[]表示或者
        //[^ ]表示除了,即判断字符串中是否有除开指定参数的其他参数,有的话就输出true
        var reg4=/[0-9]/i;
        console.log(reg4.test("AISUDOHAasda415641785722132531531534sdasdaOUIFNUIASDHDFUASOI"));
    
        //检查一个字符串中是否含有abc或者adc或者aec
        //因为开头都是a结尾都是c,所以可以用如下办法
        var reg5=/a[a-z]c/i;
        console.log(reg5.test("aac"));
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30

    在这里插入图片描述

    测试匹配:

    • 使用 test() 方法来测试字符串是否与正则表达式匹配,返回布尔值。
    • 例如:let isMatch = regex.test(str);

    查找匹配:

    • 使用 match() 方法来查找字符串中与正则表达式匹配的部分,返回匹配结果的数组。
    • 例如:let matches = str.match(regex);
    //match()
        //可以根据正则表达式,从一个字符串中奖符合条件的内容提取出来
        //默认情况下match()方法只会找到第一个符合要求的内容,找到后就会停止检索
        //我们可以设置正则表达式为全局匹配模式,这样就会匹配到所有的内容
        //可以为一个正则表达式设置多个匹配模式,而且输入指定模式的字符顺序无,比如ig或者gi皆可以
        //match()会将匹配到的内容封装到一个数组中,即使只查询到一个结果
        var result3=str.match(/[a-z]|[0-9]/gi);//在后面加一个g,设置为全局匹配模式
        //增加一个i,就表示忽略大小写,这样就可以也输出大写字母
        console.log(result3);//这样就可以输出字符串中所有符合条件的内容
        console.log(result3[2]);//输出result3这个数组中的第三个元素,也就是2
        console.log(result3[3]);//输出result3这个数组中的第四个元素,也就是b
        //如果不设置为全局匹配模式,那么就只能输出第一个符合要求的内容
        //如果在检索条件中增加一个[0-9]值域,那么字符串中的数字也可以检索出来
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    替换匹配:

    • 使用 replace() 方法来替换字符串中与正则表达式匹配的部分,返回替换后的新字符串。
    • 例如:let newStr = str.replace(regex, replacement);
    //replace()
        //可以将字符串中的指定内容替换为新的内容
        //括号中有两个参数,第一个参数是被替换的内容,第二个参数是新的内容
        var result4 =str.replace("a","###");
        console.log(result4);
        //也可以使用值域来进行替换
        var result5 =str.replace(/[0-9]/g,"数字");//通过值域来对指定对象进行替换,把0-9所有的数字全部替换成汉字“数字”
        console.log(result5);
        //也可以使用空串来对指定内容进行剔除,比如删除str字符串中的所有英文字母
        var result6 =str.replace(/[a-z]/gi,"");
        console.log(result6);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    切割字符串:

    • 使用 split() 方法来根据正则表达式将字符串切割成数组。
    • 例如:let arr = str.split(regex);
      var str="1a2b3c4d5e6f7UZHCUIAE";
        //split()可以将一个字符串拆分为一个数组
        var result=str.split(/[a-z]/gi);//依靠正则语法的类似格式来给split()拆分字符设置关键字符或者关键字符范围
        //这个方法即使不设定全局匹配模式,也会全部拆分
        console.log(result);
    
    • 1
    • 2
    • 3
    • 4
    • 5

    修饰符:

    • 正则表达式可以使用修饰符来改变匹配的行为,如 i(忽略大小写)、g(全局匹配)和 m(多行匹配)等。
    • 例如:let regex = /pattern/gi;

    元字符和字符类:

    • 正则表达式中的元字符和字符类用于匹配特定的字符或字符集合,如 .(匹配任意字符)、\d(匹配数字字符)和 [abc](匹配字符 a、b 或 c)等。
    • 例如:let regex = /\d+/;

    量词:

    • 正则表达式中的量词用于指定匹配的次数,如 *(零次或多次)、+(一次或多次)和 ?(零次或一次)等。
    • 例如:let regex = /\d{2,4}/;
        //创建一个正则表达式检查一个字符串里面是否含有aaa
        var reg=/aaa/;
        console.log(reg.test("aaabbc"));
        //重复写有些繁琐,就可以通过量词设置一个内容出现的次数
        //{n}表示重复n次
        //{m,n}表示重复m-n次
        //{m,}表示重复m次以上
        var reg2=/a{3}/i;
        //除了设置量词之外,还可以额外设置匹配模式,比如全局匹配或者是否忽略大小写
        console.log(reg2.test("aaAbbc"));
        //量词只他前边的一个内容起作用
        //例如 bc{3}指的是bccc而不是bcbcbc
        var reg3=/bc{3}/;
        console.log(reg3.test("bcbcbc"));//控制台显示错误,因为检查的字符串是bccc
        console.log(reg3.test("bccc"));//控制台显示正确,因为检查的字符串是bccc
        //可以用()来锁定量词的内容
        var reg4=/(bc){3}/;
        console.log(reg4.test("bcbcbc"));//控制台显示正确,因为检查的字符串是bcbcbc
        //量词衍生使用
        var reg5=/ab{1,4}c/;//这样表示b的数量是1-4个,所以abc abbc abbbc abbbbc这四个都可以
        console.log(reg5.test("abc"));
        console.log(reg5.test("abbc"));
        console.log(reg5.test("abbbc"));
        console.log(reg5.test("abbbbc"));
    
        var reg6=/ab{4,}c/;//表示中间的b的数量是四个或者四个以上
        console.log(reg6.test("abbc"));//控制台输出错误
        console.log(reg6.test("abbbc"));//控制台输出错误
        console.log(reg6.test("abbbbc"));//控制台输出正确
        console.log(reg6.test("abbbbbbbc"));//控制台输出正确
    
        //n+ 匹配任何包含至少一个n的字符串
        //n+ 相当于n{1,}即数量大于等于一的n的字符串
        var reg7=/ab+c/;
        console.log(reg5.test("ac"));//控制台输出错误,因为没有b
        console.log(reg7.test("abc"));//控制台输出正确,因为有b
        console.log(reg7.test("abbc"));//控制台输出正确,因为有bb
        console.log(reg7.test("abbbc"));//控制台输出正确,因为有bbb
        //至少包含一个ab就能够输出正确,多个ab不影响输出结果
        
        //n* 相当于n{0,}即数量大于等于领的n的字符串
        var reg8=/ab*c/;
        console.log(reg8.test("ac"));//控制台输出正确,因为没有b也可以
        console.log(reg8.test("abc"));//控制台输出正确,因为有b
        console.log(reg8.test("abbc"));//控制台输出正确,因为有bb
        console.log(reg8.test("abbbc"));//控制台输出正确,因为有bbb
    
        //n? 0个或者1个,相当于{0,1}即数量是0-1个
        var reg9=/ab?c/;
        console.log(reg9.test("ac"));//控制台输出正确,因为没有b也可以
        console.log(reg9.test("abc"));//控制台输出正确,因为有一个b
        console.log(reg9.test("abbc"));//控制台输出错误,因为有连个b
        console.log(reg9.test("abbbc"));//控制台输出错误,因为三个b
    
        //检查一个字符串是否以a开头
        // ^表示开头
        //比如 /^a/
        var reg10=/^a/;
        var reg11=/c$/;
        console.log(reg10.test("ab"));//控制台输出正确,因为开头是a
        console.log(reg10.test("bc"));//控制台输出错误,因为开头不是a
        console.log(reg10.test("abc"));//控制台输出正确,因为开头是a
        console.log(reg10.test("bcd"));//控制台输出错误,因为开头不是a
        console.log(reg11.test("ab"));//控制台输出错误,因为结尾是b
        console.log(reg11.test("bc"));//控制台输出正确,因为结尾是c
        console.log(reg11.test("abc"));//控制台输出正确,因为结尾是c
        console.log(reg11.test("bcd"));//控制台输出错误,因为结尾是d
    
        //如果同时使用开头和结尾
        var reg12=/^a$/;
        console.log(reg12.test("aa"));//控制台输出错误,因为开头的a和结尾的a不是同一个
        console.log(reg12.test("a"));//控制要输出正确,因为检索的a即是开头也是结尾
    
        //如果使用或语句
        var reg13=/^a|a$/;
        console.log(reg13.test("a"));//控制台输出正确,因为开头或者结尾是a
        console.log(reg13.test("aa"));//控制台输出正确,因为开头或者结尾是a
    
        //创建一个正则表达式,用来检查一个字符串是否是手机号
        //手机号的规则
        //1.以1开头
        //2.第二位数字是3-9
        //3.三位以后包括三位的数字可以使0-9任意一个
        var mobilephoneStr="15697955165";
        var mobilephoneStr2="18365445708";
        var reg14=/^1[3-9][0-9]{9}$/;
        console.log(reg14.test(mobilephoneStr));//控制台输出为true,符合条件
        console.log(reg14.test(mobilephoneStr2));//控制台输出为true,符合条件
        console.log(reg14.test("11011011011"));//控制台输出为fals,不符合手机号的规则
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89

    在这里插入图片描述

        //检查一个字符串中是否含有.
        //.表示任意字符
        var reg=/./;
        console.log(reg.test("ahduads"));//.表示任意字符,所以不管内容是什么,控制台输出都是true
        
        //在正则表达式中用\作为转义字符
        //\.来表示.
        //同理 \\表示\
        var reg2=/\./;
        console.log(reg2.test("agbuidashduia"));//字符串中没有.,所以控制台输出false
        console.log(reg2.test("asdasd.asdasd"));//字符串中有.,所以控制台输出true
        var reg3=/\\/;
        console.log(reg3.test("b\\"));//要在字符串中输入\,必须输入\\
        
        //使用构造函数时,由于他的参数是一个字符串,而\是字符串中转义字符
        //如果要使用\则需要使用\\来代替
        var reg4 =new RegExp("\\.");//这样的字符串表示检索是否有.
        console.log(reg4.test("asd"));//字符串中没有.,所以输出false
        console.log(reg4.test("ad.asd"));//字符串中有.,所以输出true
    
        // \w 任意字母、数字以及下划线_ [A-z0-9_]
        var reg4=/\w/;
        console.log(reg4.test("abc"));
        console.log(reg4.test("ABC"));
        console.log(reg4.test("123"));
        console.log(reg4.test("___"));
        //以上输出都是ture,可以使大写字母也可以是小写字母,还可以是数字和下划线_
    
        // \W 跟\w相反,除了字母、数字以及下划线_ [^A-z0-9_] 这里的^表示除了
        var reg5=/\W/;
        console.log(reg5.test("!@#$%^^*&**%"));
        console.log(reg5.test("abc"));
        console.log(reg5.test("ABC"));
        console.log(reg5.test("123"));
        console.log(reg5.test("___"));
        //第一个输出true,后面几个全部输出false。除了字母、数字以及下划线_,其余的都输出true
    
        // \d 表示任意数字 [0-9]
        // \D 表示除了数字 [^0-9]
        // \s 表示空格 
        // \S 表示除了空格
    
        // \b 表示边界 \B 表示除了单词边界
        var reg6=/\bchild\b/;
        console.log(reg6.test("hell child"));//控制台输出true
        console.log(reg6.test("hello children"));//控制台输出false
        // \bchild\b 表示搜索child这个单词,并且要存在边界
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47

    在这里插入图片描述

    案例匹配电子邮件

        //电子邮件
        //格式根据网站要求定制
        //例如 任意字母数字下划线(三个起步).任意字母数字下划线@任意字母数字.任意字母(2-5).任意字母(2-5)
        // \w{3,} (\.\w+)* @ [A-z0-9]+  (\.[A-z]{2,5}){1,2}
        // +表示一次或者一次以上,*表示可有可无
        var emailReg=/\w{3,}(\.\w+)*@[A-z0-9]+(\.[A-z]{2,5}){1,2}/;
        console.log(emailReg.test("2299999995@qq.com"));
        console.log(emailReg.test("xahsad.whahhs@123.com"));
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    在这里插入图片描述

  • 相关阅读:
    VUE3照本宣科——应用实例API与setup
    CentOS8迁移tencentOS实践
    城市网吧视频智能监控方案,实现视频远程集中监控
    专享策略02 | 套利策略-自动换仓-出场加速
    谈谈BFC
    C语言之详解字符操作函数
    遇到Bug漏测,不能总想着甩锅吧
    微软推出 Hierarchical Transformer 实现更高准确率的语音评测
    神经网络训练结果不稳定,神经网络训练时间过长
    MySQL深分页
  • 原文地址:https://blog.csdn.net/qq_45922256/article/details/138134285