跳转到主要内容
eLearner.app

互动课程

正则表达式课程

使用直接在浏览器中运行每个模式并实时显示匹配项的引擎,从头开始学习英语正则表达式。

01 · 第 1 单元 — 基础知识

4 节课

正则表达式的基础:文字模式、基本字符类、“.”通配符和转义元字符。

  1. 1.1文字模式普通字符、区分大小写和首次运行:匹配和索引。~8 min
  2. 1.2基本类:\d \w \s数字、单词字符和空格(及其否定版本)的预定义类。~10 min
  3. 1.3通配符:点“.”`.` 字符几乎匹配所有内容:它包含什么,它排除什么,以及为什么 `s` 标志很重要。~8 min
  4. 1.4转义元字符当您需要双反斜杠时,需要使用“\”转义的 12 个元字符以及原因。~10 min

02 · 第 2 单元 — 量词

4 节课

重复多少:`*`、`+`、`?`、间隔`{n,m}`以及贪婪和懒惰之间的区别。

  1. 2.1`*`、`+`、`?`零个或多个,一个或多个,可选:三个基本量词。~10 min
  2. 2.2精确数量 `{n,m}`确切地说是“n”,从“n”到“m”,至少“n”:数字量词。~10 min
  3. 2.3贪婪与懒惰默认情况下量词是贪婪的(`.*`);添加“?”作为惰性版本(“.*?”)。~10 min
  4. 2.4回溯:概述当贪婪量词失败时引擎会做什么,以及为什么它会很昂贵。~12 min

03 · 第 3 单元 — 锚点和边界

4 节课

位置,而不是字符:锚定到字符串的开头/结尾、单词边界以及带有“m”标志的每行的开头/结尾。

  1. 3.1开始和结束:`^` 和 `$`将模式锚定到字符串的第一个或最后一个字符。~8 min
  2. 3.2字边界:`\b` `\B`单词和非单词字符之间的转换;找到完整的单词。~10 min
  3. 3.3`m` 标志:多行使用“m”标志,“^”和“$”锚定到每行的开头/结尾。~10 min
  4. 3.4空线和修剪有用的模式:匹配空行,修剪行首/行尾的空格。~10 min

04 · 模块 4 — 分组和交替

4 节课

使用“()”进行分组,使用“|”在替代方案中进行选择,使用“(?:...)”避免捕获,使用“(?<name>...)”命名组,并使用反向引用引用先前的捕获。

  1. 4.1捕获组:`(...)`用于分组和捕获的括号;在比赛中访问组 1、2、3…。~10 min
  2. 4.2替代:`|`管道在两个或多个子模式之间进行选择;优先级和括号。~10 min
  3. 4.3非捕获组:`(?:...)`分组而不创建捕获:当您只需要量化或交替时很有用。~10 min
  4. 4.4命名组和反向引用`(?<name>...)` 给出名称; `\1` `\k<name>` 引用捕获。~12 min

05 · 模块 5 — 字符类

4 节课

使用“[...]”定义自定义集,使用范围,使用“[^...]”求反,并使用“\p{...}”和“u”标志访问 Unicode 属性。

  1. 5.1字符集:`[abc]`方括号定义一个位置允许的一组字符。~8 min
  2. 5.2类内的范围:`[a-z0-9]`通过破折号设置间隔;组合范围和单个字符。~8 min
  3. 5.3否定:`[^...]`否定类匹配除列出的字符之外的任何内容。~8 min
  4. 5.4Unicode 属性转义带有“u”标志的“\p{L}”、“\p{N}”、“\p{Script=...}”:语义 Unicode 类。~12 min

06 · 模块 6 — 环顾四周

4 节课

零宽度断言:在字符串中向前或向后查找而不消耗字符。前瞻`(?=)``(?!)`,后瞻`(?<=)``(?<!)`。

  1. 6.1正向前瞻:`(?=...)`检查某个模式是否遵循当前位置,而不消耗它。~10 min
  2. 6.2负向前瞻:`(?!...)`检查特定模式是否不遵循当前位置。~10 min
  3. 6.3回顾:`(?<=...)``(?<!...)`环视的“向后看”版本; ES2018+ 支持。~12 min
  4. 6.4实践中环顾四周提取不包含上下文的值、验证密码、解析分隔数字。~12 min

07 · 模块 7 — 标志、替换、拆分

4 节课

所有标志(包括 `d`、`v`)、`String.prototype.replace`/`replaceAll`/`split` 都带有正则表达式,在替换字符串中引用 `$1`/`$<name>` 并替换回调。

  1. 7.1所有标志的详细信息`g i m s u v y d`:每个功能的作用以及它们如何组合。~12 min
  2. 7.2基本替换和“$1”将匹配项替换为固定字符串或反向引用 `$1` / `$<name>`。~10 min
  3. 7.3替换为回调替换功能:将每一个匹配项用任意JS代码进行变换,获取分组。~12 min
  4. 7.4用正则表达式分割根据模式拆分字符串(宽松的 CSV、最小标记器)。~10 min

08 · 第 8 单元 — 练习

4 节课

将所有这些放在一起解决实际问题:验证电子邮件、解析日志、提取 URL/IP、编写抗 ReDoS 模式。

  1. 8.1验证电子邮件电子邮件的“足够好”模式,并解释了权衡。~12 min
  2. 8.2Apache 日志解析器使用命名组从日志行中提取 IP、方法、路径和状态代码。~12 min
  3. 8.3提取 URL 和 IP识别自由格式文本中的 http(s) URL 和 IPv4 地址。~12 min
  4. 8.4编写 ReDoS 安全模式识别灾难性模式(`(a+)+b`),重构它们,使用类似原子的量词。~14 min