• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    JavaScript正则表达式迷你书之贪婪模式-学习笔记

    贪婪模式:

    在使用修饰匹配次数的特殊符号时,有几种表示方法可以使同一个表达式能够匹配不同的次数,比如:"{m,n}", "{m,}", "?", "*", "+",具体匹配的次数随被匹配的字符串而定。这种重复匹配不定次数的表达式在匹配过程中,总是尽可能多的匹配

    非贪婪模式:

    在修饰匹配次数的特殊符号后再加上一个 "?" 号,则可以使匹配次数不定的表达式尽可能少的匹配,使可匹配可不匹配的表达式,尽可能的 "不匹配"。这种匹配原则叫作 "非贪婪" 模式,也叫作 "勉强" 模式。如果少匹配就会导致整个表达式匹配失败的时候,与贪婪模式类似,非贪婪模式会最小限度的再匹配一些,以使整个表达式匹配成功。

    var regex = /\d{2,5}/g;
    var string = "123 1234 12345 123456";
    console.log( string.match(regex) );
    // => ["123", "1234", "12345", "12345"]

    其中正则 /d{2,5}/,表示数字连续出现 2 到 5 次。会匹配 2 位、3 位、4 位、5 位连续数字。 但是其是贪婪的,它会尽可能多的匹配。你能给我 6 个,我就要 5 个。你能给我 3 个,我就要 3 个。 反正只要在能力范围内,越多越好。

    横向模糊匹配

    横向模糊指的是,一个正则可匹配的字符串的长度不是固定的,可以是多种情况的。 其实现的方式是使用量词。譬如 {m,n},表示连续出现最少 m 次,最多 n 次。 比如正则 /ab{2,5}c/ 表示匹配这样一个字符串:第一个字符是 "a",接下来是 2 到 5 个字符 "b",最后是字符 "c"。

    var regex = /ab{2,5}c/g;
    var string = "abc abbc abbbc abbbbc abbbbbc abbbbbbc";
    console.log( string.match(regex) );
    // => ["abbc", "abbbc", "abbbbc", "abbbbbc"]

    纵向模糊匹配

    纵向模糊指的是,一个正则匹配的字符串,具体到某一位字符时,它可以不是某个确定的字符,可以有多种 可能。 其实现的方式是使用字符组。
    譬如 [abc],表示该字符是可以字符 "a"、"b"、"c" 中的任何一个。 比如 /a[123]b/ 可以匹配如下三种字符串: "a1b"、"a2b"、"a3b"。

    var regex = /\d{2,5}?/g;
    var string = "123 1234 12345 123456";
    console.log( string.match(regex) );
    // => ["12", "12", "34", "12", "34", "12", "34", "56"]
    其中 /\d{2,5}?/ 表示,虽然 2 到 5 次都行,当 2 个就够的时候,就不再往

    多选分支

    一个模式可以实现横向和纵向模糊匹配。而多选分支可以支持多个子模式任选其一。 具体形式如下:(p1|p2|p3),其中 p1、p2 和 p3 是子模式,用 |(管道符)分隔,表示其中任何之一。 例如要匹配字符串 "good" 和 "nice" 可以使用 /good|nice/。

    var regex = /good|nice/g;
    var string = "good idea, nice try.";
    console.log( string.match(regex) );
    // => ["good", "nice"]

    但有个事实我们应该注意,比如我用 /good|goodbye/,去匹配 "goodbye" 字符串时,结果是 "good"

    var regex = /good|goodbye/g;
    var string = "goodbye";
    console.log( string.match(regex) );
    // => ["good"]

    而把正则改成 /goodbye|good/,结果是:

    var regex = /goodbye|good/g;
    var string = "goodbye";
    console.log( string.match(regex) );
    // => ["goodbye"]

    也就是说,分支结构也是惰性的,即当前面的匹配上了,后面的就不再尝试了。

    反向引用

    比如要写一个正则支持匹配如下三种格式

    2020-02-25
    2020/02/25
    2020.02.25

    var regex = /\d{4}(-|\/|.)\d{2}(-|\/|.)\d{2}/;
    var string1 = "2020-06-12";
    var string2 = "2020/06/12";
    var string3 = "2020.06.12";
    var string4 = "2020-02/12";
    console.log( regex.test(string1) ); // true
    console.log( regex.test(string2) ); // true
    console.log( regex.test(string3) ); // true
    console.log( regex.test(string4) ); // true

    其中 / 和 . 需要转义。虽然匹配了要求的情况,但也匹配 "2016-06/12" 这样的数据。

    假设我们想要求分割符前后一致怎么办?此时需要使用反向引用:

    var regex = /\d{4}(-|\/|.)\d{2}\1\d{2}/;
    var string1 = "2020-06-12";
    var string2 = "2020/06/12";
    var string3 = "2020.06.12";
    var string4 = "2020-02/12";
    console.log( regex.test(string1) ); // true
    console.log( regex.test(string2) ); // true
    console.log( regex.test(string3) ); // true
    console.log( regex.test(string4) ); // false

    注意里面的 1,表示的引用之前的那个分组 (-|/|.)。不管它匹配到什么(比如 -),1 都匹配那个同 样的具体某个字符。

    我们知道了 1 的含义后,那么 2 和 3 的概念也就理解了,即分别指代第二个和第三个分组。

    使用例子

    字符串 trim 方法模拟

    function trim(str) {
     return str.replace(/^\s+|\s+$/g, '');
    }

    表示一个 16 进制字符,可以用字符组 [0-9a-fA-F]。 其中字符可以出现 3 或 6 次,需要是用量词和分支结构。 使用分支结构时,需要注意顺序。 正则如下

    var regex = /#([0-9a-fA-F]{6}|[0-9a-fA-F]{3})/g;
    var string = "#ffbbad #Fc01DF #FFF #ffE";
    console.log( string.match(regex) );
    // => ["#ffbbad", "#Fc01DF", "#FFF", "#ffE"]

    上面内容就结束了,下面是其他网友的补充可以参考一下

    var regExp = /8.*8/;
    var str = "8google8 8google8 8google8";

    上面例子,是贪婪模式,其实是用了重复(区间)匹配的正则表达式都为贪婪模式

    前瞻模式是指某个匹配后面必须跟着某个字符串,例子如下

    var regExp = /goo(?=gle)/;
    var strOne = google;
    var strTwo = googoo;

    定语式 返回匹配的是 后面是带 gle 的;

    捕获性分组和非捕获性分组:例子如下:

    var regExp = /(google)\s(2020)/;
    var str = "google 2020";

    返回的 是一组数组[ google 2020,google,2020]

    var regExp = /(google)\s(?:2020)/;
    var str = "google 2020"

    返回的数组[google 2020,google]

    以上是看到一个微博 记录以便以后学习

    JavaScript正则表达式迷你书大家可以看一下,分类很细。

    以上就是JavaScript正则表达式迷你书之贪婪模式-学习笔记的详细内容,更多关于正则表达式迷你书的资料请关注脚本之家其它相关文章!

    上一篇:javascript正则表达式RegExp入门图文教程
    下一篇:正则表达式匹配闭合HTML标签(支持嵌套)
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    JavaScript正则表达式迷你书之贪婪模式-学习笔记 JavaScript,正则,表达式,迷你,