这篇文章主要介绍了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正则表达式迷你书之贪婪模式-学习笔记的详细内容,更多关于正则表达式迷你书的资料请关注脚本之家其它相关文章!

来源:脚本之家

链接:https://www.jb51.net/article/181239.htm

申请创业报道,分享创业好点子。点击此处,共同探讨创业新机遇!

js正则贪婪模式_JavaScript正则表达式迷你书之贪婪模式-学习笔记相关推荐

  1. 《JavaScript 正则表达式迷你书》知识点小抄本

    介绍 这周开始学习老姚大佬的<JavaScript 正则表达式迷你书> , 然后习惯性的看完一遍后,整理一下知识点,便于以后自己重新复习. 我个人觉得:自己整理下来的资料,对于知识重现,效 ...

  2. java 正则 惰性匹配_js正则表达式惰性匹配和贪婪匹配用法分析

    本文实例讲述了js正则表达式惰性匹配和贪婪匹配用法.分享给大家供大家参考,具体如下: 在讲贪婪模式和惰性模式之前,先回顾一下JS正则基础: 写法基础: ①不需要双引号,直接用//包含 => /w ...

  3. tplink迷你路由器中继模式_TP-link mini(迷你)无线路由器设置(Repeater模式)

    本文的设置方法适用于TP-Link mini系列 Repeater模式能够对原来的无线信号进行中继和放大,扩大原来的无线信号的覆盖范围,Repeater模式下的组网拓扑图如下所示: 设置实例:上图中电 ...

  4. tplink迷你路由器中继模式_TP-link mini(迷你)无线路由器设置(Repeater模式) | 192路由网...

    本文的设置方法适用于TP-Link mini系列路由器中的TL-WR700N.TL-WR702N.TL-WR706N.TL-WR710N.TL-WR800N型号,本文将以TL-WR700N为例来介绍详 ...

  5. 周志华西瓜书第三章学习笔记

    第三章学习笔记 文章目录 第三章学习笔记 1.知识脉络 2.我的笔记 参考 1.知识脉络 2.我的笔记 这一章公式推导实在太多了,需要补充的推导过程也有很多,就不写电子档了.扩展公式推导和LDA部分补 ...

  6. 《JavaScript 正则表达式迷你书》问世了!

    1.1版,下载链接:github.com/qdlaoyao/js- 之前在本站发表了一篇文章,<JS正则表达式完整教程(略长)>,正如你所看到的那样确实很长,也获得了近1000人的喜欢.但 ...

  7. java js 正则区别_对比正则表达式在JavaScript与Java中的区别

    这篇文章主要介绍了JavaScript与Java正则表达式写法的区别介绍,需要的朋友可以参考下 Js验证写法:(转义符\) var str = "待验证文本"; var regul ...

  8. js 正则匹配邮箱_JS正则表达式验证手机号和邮箱

    一.验证手机号 functionisPoneAvailable(poneInput) {var myreg=/^[1][3,4,5,7,8][0-9]{9}$/;if (!myreg.test(pon ...

  9. python正则表达式贪婪匹配_Python正则表达式教程之三:贪婪/非贪婪特性

    之前已经简单介绍了Python正则表达式的基础与捕获,那么在这一篇文章里,我将总结一下正则表达式的贪婪/非贪婪特性. 贪婪 默认情况下,正则表达式将进行贪婪匹配.所谓"贪婪",其实 ...

最新文章

  1. numpy.where()用法
  2. python创建数组并运行,python中Numpy的数组创建
  3. cobaltstrike扩展_Cobalt Strike系列教程第七章:提权与横向移动
  4. 大数据开发工具hive内部常用函数都有哪些?
  5. Error pulling origin: error: The following untracked working tree files would be overwritten by...
  6. 原有Android/IOS项目集成flutter功能
  7. 【CTF】题目名称:破译 题目类型:Web
  8. python 邮件抄送是什么意思_python使用SMTP发邮件时使用Cc(抄送)和Bcc(密送)...
  9. 微信公众号文章是HTML吗,醒醒吧!你看的微信文章都不是自己写的,内容全靠搬!...
  10. Scrapy爬虫框架的原理与实战[阳光政务爬虫项目]
  11. ios ping服务器
  12. 利用树莓派组建支持迅雷离线下载的NAS
  13. 无线射频专题《协议类,IEEE 802.11/802.11b/802.11a/802.11g/802.11n/802.11ac标准简介》
  14. jboot jboot.properties 设置
  15. 错误信息 Error executing DDL via JDBC Statement 解决办法
  16. java awt canvas_java.awt 类 Canvas - Java 中文参考手册
  17. 【产品实战-乘风游旅游App】3.0 乘风游的产品设计之用户角色
  18. 无人零售的黑科技:RFID技术
  19. 红旗高级服务器Linux4.1安装Oracle9204(转)
  20. day09---(07)阿里云视频点播技术

热门文章

  1. iOS开发之 几本书
  2. VB.NET启动外部程序
  3. PEOPEO飘飘人项目总监胡实:项目经理进阶指南
  4. 必要商城高级UED经理张不写:设计师如何规划职业方向
  5. PMCAFF微课堂已结束 | 前YY产品总监深度揭秘P2P运营推广精髓
  6. Outlook 2010 配置关联QQ邮箱
  7. JAVA反射+SOCKET实现远程方法调用
  8. XML-RPC远程方法调用
  9. Linux下which、whereis、locate、find 命令的区别
  10. LoadRunner学习第四天——检查点学习(转载)