美文网首页
javascript正则表达式使用小结

javascript正则表达式使用小结

作者: 桓城重 | 来源:发表于2019-07-31 16:05 被阅读0次

    正则在很多编程语言中都有,它们的用法基本都是类似的,不同的语言可能会存在一些区别。在JavaScript中,正则也有它自己的特点,正则表达式对很多前端开发人员,尤其是前端小白或者没有任何系统编程经验的程序员来说,往往都是一个难以理解和使用的技术点,学习和掌握正则,是迈向前端中高级的一个必须掌握的技能,学习和掌握正则表达式的使用,可以高效解决前端开发中遇到的很多棘手的问题。

    下面开始今天的正题:

    JavaScript通过内置对象RegExp支持正则表达式

    有两种方法实例化RegExp对象

    1.字面量

    var reg = /is/;

    2.构造函数

    var reg = new RegExp('/is/','gim');

    //gim为修饰符,g:global全文搜索,不添加,搜索到第一个匹配停止;i:ignoreCase忽略大小写,默认大小写敏感;m:multiple lines多行搜索。

    正则表达式有两种基本字符类型组成:

    ——原义文本字符(像字母a,数字9等等简而言之它是什么就是什么)

    ——元字符(元字符是在正则表达式中有特殊含义的非字母字符,如\d表示数字)

    在正则表达式中有几个字符是需要特别注意的:
    . * + ? $ ^ | \ () {} []

    元字符(下图来源于w3c截图):

    字符类:

    一般情况下,正则表达式一个字符对应字符串一个字符(这点很重要)。我们可以使用元字符[ ]来构建一个简单的类。所谓类是指符合某些特性的对象,一个泛指,而不是特指某个字符,表达式[abc]把字符a或b或c归为一类,表达式可以匹配这类的字符串。

    例如:
    "a1b2c3d4".replace(/[abc]/g,"x");
    替换结果为:
    x1x2x3d4

    范围类:

    正则表达式还提供了范围类,我们可以使用[a-z]来连接两个字符表示从a到z的任意字符,这是个闭区间,也就是包含a和z本身。注意其中的“-”,在范围之间的表示范围,不在范围之间的表示字符本身。

    例如:

    "a1b2c3d4".replace(/[a-z]/g,"x");

    替换结果为:
    x1x2x3x4

    预定义类:


    边界:

    正则表达式还提供了几个常用的边界匹配字符

    需要特别注意的是^,在范围类[ ]里面表示取反。

    量词:

    假如我们想要匹配一串数字:

    “1234567890”

    正则这么写:
    /\d\d\d\d\d\d\d\d\d\d/

    太繁琐了,有些特殊场景下根本不适用,那该如何简写呢?这就用到接下来要说的量词。

    则,上面的例子要匹配包含10个数字的序列的字符串的写法为:
    /\d{10}/

    贪婪模式:

    例如:

    一串数字123456789

    正则\d{2,4}匹配的话会选择到:

    1234而不是12,或者123(没有用全局搜索,则从最开始查找),正则会选择长度最大的查找结果作为结果返回。

    非贪婪模式:

    让正则表达式尽可能少的匹配,也就是说一旦成功匹配不再继续尝试,就是非贪婪模式。具体做法很简单,就是在量词后面加上?即可。

    "123456789".match(/\d{3,5}?/g);

    结果为["123","456","789"]

    分组:

    如何匹配一个字符串3次?
    正则写法你可能想这么写:

    good{3}
    实际上是不对的,它只会匹配到:
    gooddd

    那么如何正确的写呢?
    用()分组即可.

    (good){3}

    反向引用:

    如何将 “2019-07-31” 用正则匹配修改格式为 "07/31/2019" ?

    var reg = /(\d{4})-(\d{2})-(\d{2})/g

    “2019-07-31”.replace(reg,“$2/$3/$1”)

    $加索引跟()分组一一对应。

    不希望捕获某些分组,只需要在分组内加上?:就可以

    (?:good).(ok)

    $1即为ok,而不是good。

    前瞻:

    正则表达式从文本头部向尾部开始解析,文本尾部方向成为“前”。

    前瞻就是正则表达式匹配到规则的时候,向前检查是否符合断言,前瞻通俗来讲就是当表达式匹配到字符以后,根据定义的前瞻规则比如规定它后面一个挨着的字符是不是数字,如果是就符合匹配,否则不符合,可以认为前瞻相当于两套匹配规则,即当第一套匹配上以后再判断匹配到的条件是否符合第二套规则,均符合则取。后顾/后瞻方向相反,JavaScript不支持后顾。符合和不符合特定断言称为肯定/正向匹配和否定/负向匹配。

    例如:\w(?=\d),表示匹配后面一个紧挨着数字的字符

    对象属性:


    正则表达式的方法:

    RegExp.prototype.test(str);检索字符串中指定的值。返回 true 或 false。

    RegExp.prototype.exec(str);检索字符串中指定的值。返回找到的值,并确定其位置。

    RegExp.prototype.compile();编译正则表达式。

    支持正则表达式的String对象的方法:


    方法很常见,不懂的可以自行百度。

    纯手码字,部分地方为了省事直接截图,喜欢的小伙伴可以点波关注哦

    相关文章

      网友评论

          本文标题:javascript正则表达式使用小结

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