正则表达式:模式匹配入门
这门课适合这样的开发者:从 Stack Overflow 粘贴过不少正则,但一让你写、甚至只是读一个正则就卡住。你能说出“这个大概是匹配邮箱的”,可 \d、[^a-z]、+、^、(…) 和 .+? 在你眼里仍然是乱码。解决办法不是继续收集更多可粘贴的模式,而是把正则赖以构成的那套小字母表一块一块学下来:字面量、字符类、量词、锚点、分组、备选,以及贪婪与懒惰,直到你面对一个陌生模式时能把它的作用说出口。本课用 JavaScript 的正则语法作为具体载体,但这些构件几乎可以迁移到所有语言。
课程结束后你将能够(课程目标):
- 说出正则表达式是什么,匹配纯字面量文本,并区分字面量字符和特殊字符(元字符)。
- 用字符类匹配一组字符(
[abc]、范围、取反,以及\d/\w/\s简写),并确切知道.匹配什么、不匹配什么。 - 用
*、+、?和{n,m}控制某样东西重复多少次。 - 用锚点
^、$和\b把匹配钉在开头、结尾或词边界上。 - 用捕获组从匹配里取出片段,并用备选(
|)提供多个选择。 - 解释贪婪(
.+)与懒惰(.+?)匹配的差别,然后在真实控制台里写出并验证一个校验器。
先修条件: 你能读基本的代码:字符串、变量,以及调用 "text".match(...) 这样的函数。不假设任何正则词汇:字符类、量词、锚点、分组、贪婪/懒惰都从零讲起。
练习环境: 你使用自己的浏览器 DevTools 控制台或 Node.js REPL,本课程的练习没有嵌入式沙盒。这里的每个模式都在真实 JavaScript 引擎里运行过,每道练习都指向一个你自己打开的控制台。
课程目录
来源列表见 sources.md。