「正则表达式」 一、正则表达式字符匹配(前端必懂 )

原书这么一句话,特别棒:正则表达式是匹配模式,要么匹配字符,要么匹配位置,要记住。

1. 两种模糊匹配

正则表达式的强大在于它的模糊匹配,这里介绍两个方向上的“模糊”:横向模糊和纵向模糊。

  • 横向模糊匹配

即一个正则可匹配的字符串长度不固定,可以是多种情况。

如 /ab{2,5}c/ 表示匹配: 第一个字符是 "a" ,然后是 2 - 5 个字符 "b" ,最后是字符 "c" :

  • 纵向模糊匹配

即一个正则可匹配某个不确定的字符,可以有多种可能。

如 /[abc]/ 表示匹配 "a", "b", "c" 中任意一个。

2. 字符组

  • 范围表示法

可以指定字符范围,比如 [1234abcdUVWXYZ] 就可以表示成 [1-4a-dU-Z] ,使用 - 来进行缩写。

如果要匹配 "a", "-", "z" 中任意一个字符,可以这么写: [-az] 或 [a\-z] 或 [az-] 。

  • 排除字符组

即需要排除某些字符时使用,通过在字符组第一个使用 ^ 来表示取反,如 [^abc] 就表示匹配除了 "a", "b", "c" 的任意一个字符。

  • 常见简写形式

3. 量词

量词也称重复,常用简写如下:

  • 贪婪匹配和惰性匹配

在正则 /\d{2,4}/ ,表示数字连续出现 2 - 4 次,可以匹配到 2 位、 3 位、4 位连续数字。

但是在 贪婪匹配 如 /\d{2,4}/g ,会尽可能多匹配,如超过 4 个,就只匹配 4 个,如有 3 个,就匹配 3 位。

而在 惰性匹配 如 /\d{2,4}?/g ,会 尽可能少 匹配,如超过 2 个,就只匹配 2 个,不会继续匹配下去。

4. 多选分支

即提供多个子匹配模式任选一个,使用 |(管道符)分隔,由于分支结构也是惰性,即匹配上一个后,就不会继续匹配后续的。

格式如:(r1|r2|r3),我们就可以使用 /leo|pingan/ 来匹配 "leo" 和 "pingan"。

5. 案例分析

匹配字符,无非就是字符组、量词和分支结构的组合使用。

  • 十六进制颜色值匹配
  • 时间和日期匹配
  • Windows操作系统文件路径匹配

盘符使用 [a-zA-Z]:\\ ,这里需要注意 \ 字符需要转义,并且盘符不区分大小写;

文件名或文件夹名,不能包含特殊字符,使用 [^\\:*<>|"?\r\n/] 表示合法字符;

并且至少有一个字符,还有可以出现任意次,就可以使用 ([^\\:*<>|"?\r\n/]+\\)* 匹配任意个 文件夹\;

还有路径最后一部分可以是 文件夹 ,即没有 \ 于是表示成 ([^\\:*<>|"?\r\n/]+)?。

  • id匹配

如提取 <div id="leo" class="good"></id> 中的 id="leo" :

tips1:由于 . 匹配双引号,且 * 贪婪,就会持续匹配到最后一个双引号结束。

tips2:使用惰性匹配,但效率低,有回溯问题。

tips3:最终优化。

公众号:前端自习课

相关文章

深入解析MySQL:查询的正则匹配(深入解析mysql:查询的正则匹配是什么)

概述上一章 查询的过滤条件,我们了解了MySQL可以通过 like % 通配符来进行模糊匹配。同样的,它也支持其他正则表达式的匹配,我们在MySQL中使用 REGEXP 操作符来进行正则表达式匹配。用...

Java性能调优--代码篇:优化正则表达式的匹配效率

作者 | 浩说编程来源 | 公众号:浩说编程[ 大厂技术资源 | 研发必备安装包 | 限时免费获取 ] 在我们的日常业务开发中经常会涉及到使用正则表达式对数据进行处理,比如String的Split()...

如何正则匹配乱码?(正则匹配 ?)

曾经护网的时候,遇到过要写一个正则,匹配文本中包含乱码,当时精神状态比较紧张,没有写出来,事后感觉非常尴尬,不过现在已经释然了,趁着周末休息的时候,简单研究了一下,以防未来还会遇到同样的问题,测试样例...

爬虫必备!正则匹配全攻略(正则匹配?!)

在网络爬虫中,正则表达式是一项非常重要的技能。它可以帮助我们快速准确地从网页中提取出我们所需要的信息。本文将为大家详细介绍如何使用正则表达式匹配所有内容。一、理解正则表达式基础知识正则表达式是一种描述...

技术趣讲 |「正则」王国奇遇记(正则设计)

第一回 初来乍到NPC: "欢迎来到正则表达式的国度,勇士!这里的每一个人都使用正则表达式,我是这里的 NPC,每一个来到这里的人都将由我代为介绍正则世界的规则,至于能领悟到何种境界,就看你的...