工具与学习资源

这是本系列的最后一章。光会写正则还不够,高效调试和持续学习同样重要。这一章推荐调试工具、互动教程、经典书籍,并附 JavaScript 与 Python 在代码里使用正则的常用方法速查。

调试神器 regex101

如果说本系列只能记住一个网址,那就是 regex101.com。这个网站是正则调试的"瑞士军刀"——实时高亮匹配、逐字解释模式含义、显示捕获组内容、统计匹配步数(检测灾难性回溯)。新手用到老手都用它。

// regex101.com 是正则调试神器,功能强大

// 1. 左侧选引擎:PCRE(PHP)、JavaScript、Python、Go、Java
//    不同引擎语法略有差异,选对引擎很重要

// 2. 顶部输入正则,如:
/^\d{4}-\d{2}-\d{2}$/

// 3. 中间粘贴测试字符串(支持多行):
2026-08-05
2026/08/05
not-a-date
2026-13-99

// 4. 右侧自动:
//    - 实时高亮所有匹配
//    - 解释每段模式的含义(对新手最有用)
//    - 列出捕获组的内容
//    - 显示匹配步数(检测灾难性回溯)

// 5. 底部有"单元测试"区:可保存正则并生成分享链接
//    团队协作时把链接发出去,对方就能看到完整调试环境

regex101 的杀手锏是右侧的"解释面板":把光标放在模式任意位置,它会告诉你这一段是什么意思、匹配什么。新手看不懂别人写的正则,粘进去就能逐段理解。还可以生成分享链接给同事协作调试,这是团队代码评审时的高频用法。

JavaScript 里使用正则

JS 里写正则有两种语法:字面量(斜杠包裹)和 RegExp 对象(字符串构造)。模式固定时用字面量更简洁,模式含变量时只能用对象构造。掌握字符串的几个核心方法就够日常使用。

// JavaScript 里使用正则的两种方式

// 方式 1:字面量(推荐,模式固定时用)
const phone = /1[3-9]\d{9}/;
phone.test("13912345678");          // true
"13912345678".match(phone);         // ["13912345678"]

// 方式 2:RegExp 对象(模式里有变量时用)
const word = "cat";
const re = new RegExp(word, "gi");
"Cat cat CAT".match(re);            // ["Cat","cat","CAT"]

// 字符串方法(都支持正则参数)
"abc123".replace(/\d+/g, "X");       // "abcX"
"a,b;c".split(/[,;]/);              // ["a","b","c"]
"hello".search(/l/);                // 2 (返回位置)
"hello world".matchAll(/\w+/g);     // 迭代所有匹配

// matchAll 返回迭代器,用 for...of 或展开
for (const m of "a1 b22".matchAll(/(\w)(\d+)/g)) {
  console.log(m[1], m[2]);   // a 1, b 22
}

Python 里使用正则

Python 通过内置的 re 模块使用正则,功能与 JS 等价但 API 风格不同——re.findallre.subre.splitre.compile。建议模式字符串用 r"" 原生写法,反斜杠所见即所得。

// Python 里使用正则(re 模块)

// import re
//
// 1. 查找全部
// re.findall(r"\d+", "a1b22c333")        # ['1', '22', '333']
//
// 2. 提取(含捕获组返回组的列表)
// re.findall(r"(\w+)@(\w+)", "a@x b@y")  # [('a','x'), ('b','y')]
//
// 3. 替换
// re.sub(r"\d+", "X", "a1b22")            # 'aXbX'
// re.sub(r"(\w+)@(\w+)", r"\2/\1", "a@x")  # 'x/a' (反向引用用 \1)
//
// 4. 分割
// re.split(r"[,;]", "a,b;c")              # ['a', 'b', 'c']
//
// 5. 编译复用(大文本重复使用时性能更好)
// pattern = re.compile(r"\d+", re.I)
// pattern.findall("a1b2")                  # ['1', '2']

// Python 特点:
//   - 模式字符串推荐 r"" 原生写法,反斜杠所见即所得
//   - 反向引用写 \1(同 JS)
//   - 命名组语法 (?P<name>...) 注意带 P

Python 与 JS 的两个关键差异:命名组语法 Python 用 (?P<name>...)(带 P),JS 用 (?<name>...)(不带 P);编译复用 Python 用 re.compile 显式编译,JS 字面量本身就是编译后的对象。

其他好工具

除了 regex101,还有几个各有特色的工具值得收藏:

经典书籍与文档

系统性学习推荐这几本书,从入门到精通都有覆盖:

// 推荐学习资源

// === 网站 ===
// regex101.com   调试神器,实时高亮 + 解释 + 多引擎切换
// regexr.com     速查表很棒,鼠标悬停看每个符号含义
// regexone.com   免费互动教程,30 分钟过一遍基础
// regexcrossword.com  正则填字游戏,边玩边练
// debuggex.com   可视化正则为 railroad 图,看清楚分支结构

// === 书籍 ===
// 《精通正则表达式》Jeffrey Friedl 著
//   俗称"正则圣经",深入讲解引擎原理,经典之作
// 《正则表达式必知必会》Ben Forta 著
//   短小精悍,一两天读完,新手友好
// 《正则表达式经典实例》
//   收录大量实战模式,可当工具书查阅

// === 文档 ===
// MDN: developer.mozilla.org/zh-CN/docs/Web/JavaScript/Guide/Regular_Expressions
//   JS 正则权威文档,带完整 API 参考
// Python: docs.python.org/zh-cn/3/library/re.html
//   re 模块官方文档

// === 练习平台 ===
// codewars.com    大量正则题,从入门到变态
// leetcode.cn     搜索"正则"标签的题
// HackerRank      正则专项挑战

阅读建议:新手先读《必知必会》建立全局观,再上手 regexone 互动练习;有基础后读《精通正则表达式》理解引擎原理(尤其是回溯机制);日常查阅首选 MDN 或 Python 官方文档,准确度最高。

实战建议(全系列总结)

正则是那种"两周不用就忘光"的技能,但熟练后能省下大量字符串处理代码。坚持每次遇到文本匹配问题都用正则解决,一年后你会成为团队里"正则翻译官"——别人看到一串乱码求你解释,你三秒就能讲清。

恭喜你读完整个系列!欢迎回到目录复习 → 正则教程目录

← 上一篇 常用正则模式

← 返回 正则教程目录

✈️💬