美文网首页
JavaScript 正则表达式简介

JavaScript 正则表达式简介

作者: Kevin丶CK | 来源:发表于2019-03-20 11:04 被阅读0次

    1.背景

    很多场景下,我们需要校验获取到的数据类型, 比如密码,手机号码,邮箱,金额等等;
    有些场景下,用户输入一些特殊的字符,我们要需要过滤,或为了显示美观需要格式化等;
    这样既可以规范数据,提高性能,又可以过滤一部分存在安全隐患的数据。这个时候,正则就可以很简单快捷的帮助我们做到。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。

    2.正则表达式

    什么是正则表达式呢?
    一张图来了解正则式表达式:


    (1)^ 为匹配输入字符串的开始位置;
    (2)[a-z0-9_-]为只允许包含字符、数字、下划线和连接字符(-);
    (3){3,15}为匹配校验的字符串只能为3~15的长度;
    (4)$ 为匹配输入字符串的结束位置。
    这样就很容易理解正则表达式了,就是以^开始,以$ 结束,中间跟着校验的字符和位数。

    下面体验一下:
        let str1 = "123ab";//5位,低于6位,不匹配
        let str2 = "123abc_-";//8位,只包含数字0-9,小写字母a-z,匹配
        let str3 = "123abc_-!";//包含规则外的!字符,不匹配
        let str4 = "123Abc_-!";//包含规则外的A字符,不匹配
        let str4 = "123abc_-231abc";//14位,超过6~12位,不匹配
        let patt1 = /^[a-z0-9-_]{6,12}$/;//只能包含小写字母a-z、0-9、_和-,并且只能6~12位。
        console.log(patt1.test(str1));//false
        console.log(patt1.test(str2));//true
        console.log(patt1.test(str3));//false
        console.log(patt1.test(str4));//false
        console.log(patt1.test(str5));//false
    

    可以自己试试~~~
    附录:这里面有平时用到的表达式,建议有空看看
    到这里基本可以看懂正则表达式了,
    其他的正则的修饰符,方括号内表达式,元字符可以自己查找 JavaScript RegExp 对象参考手册。
    下面做个简单的介绍

    3.RegExp 对象

    什么是 RegExp?
    正则表达式描述了字符的模式对象。
    当您检索某个文本时,可以使用一种模式来描述要检索的内容。RegExp 就是这种模式。
    简单的模式可以是一个单独的字符。
    更复杂的模式包括了更多的字符,并可用于解析、格式检查、替换等等。
    您可以规定字符串中的检索位置,以及要检索的字符类型,等等。

    3.1 语法
    let patt=new RegExp(pattern,modifiers);
    //或更简单的方法
    let patt=/pattern/modifiers;
    

    pattern:模式描述了一个表达式模型。
    modifiers:修饰符(modifiers)描述了检索是否是全局,区分大小写等。
    注意:当使用构造函数创造正则对象时,需要常规的字符转义规则(在前面加反斜杠 \)。比如,以下是等价的:

    let patt= new RegExp("\\w+");
    let patt= /\w+/;
    
    3.2 RegExp 修饰符

    修饰符用于执行不区分大小写和全文的搜索。
    i - 修饰符是用来执行不区分大小写的匹配。
    g - 修饰符是用于执行全文的搜索(而不是在找到第一个就停止查找,而是找到所有的匹配)。
    m -修饰符是执行多行匹配。

    //在字符串中不区分大小写找"runoob"
    let str = "Visit RUnoob";
    let patt1 = /runoob/i;
    console.log(str.match(patt1));
    //["RUnoob", index: 6, input: "Visit RUnoob", groups: undefined]
    let str2="Is this all there is?";
    let patt2=/is/g;
    console.log(str2.match(patt2));//["is", "is"]
    let patt3=/is/gi;
    console.log(str2.match(patt3));["Is", "is", "is"]
    
    3.3 方括号

    方括号用于查找某个范围内的字符:


    3.4 正向肯定预查

    (?!pattern):正向肯定预查(look ahead positive assert),在任何匹配pattern的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如,"Windows(?=95|98|NT|2000)"能匹配"Windows2000"中的"Windows",但不能匹配"Windows3.1"中的"Windows"。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始。

        let regx1 = /^(?![0-9]+$)/;
        let str2 = "0123123";
        let str3 = "0123aaa";
        console.log(regx1.test(str2));//false
        console.log(regx1.test(str3));//true
    
    3.5 元字符

    元字符(Metacharacter)是拥有特殊含义的字符:


    3.7 量词
    3.8 RegExp 对象方法
    (1)test()

    test()方法搜索字符串指定的值,根据结果并返回真或假。

    let patt1=new RegExp("e");
    console.log(patt1.test("The best things in life are free"));//true
    
    (2)exec()

    exec() 方法检索字符串中的指定值。返回值是被找到的值。如果没有发现匹配,则返回 null。

    var patt1=new RegExp("e");
    console.log(patt1.exec("The best things in life are free"));
    //["e", index: 2, input: "The best things in life are free", groups: undefined]
    
    3.9 支持正则表达式的 String 对象的方法
    (1)search()

    检索与正则表达式相匹配的值。

    (2)match()

    找到一个或多个正则表达式的匹配。

    (3)replace()

    替换与正则表达式匹配的子串。

    (4)split()

    把字符串分割为字符串数组。

    相关文章

      网友评论

          本文标题:JavaScript 正则表达式简介

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