工具与学习资源
这是本系列的最后一章。光会写正则还不够,高效调试和持续学习同样重要。这一章推荐调试工具、互动教程、经典书籍,并附 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
}- test:只判断是否匹配,返回布尔。
- match:提取第一个或全部匹配(加
g返回数组,不加返回带捕获组的对象)。 - matchAll:返回迭代器,可遍历每个匹配及捕获组(必须加
g)。 - replace:替换,支持反向引用
$1或回调函数。 - split:按模式分割字符串。
Python 里使用正则
Python 通过内置的 re 模块使用正则,功能与 JS 等价但 API 风格不同——re.findall、re.sub、re.split、re.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>...) 注意带 PPython 与 JS 的两个关键差异:命名组语法 Python 用 (?P<name>...)(带 P),JS 用 (?<name>...)(不带 P);编译复用 Python 用 re.compile 显式编译,JS 字面量本身就是编译后的对象。
其他好工具
除了 regex101,还有几个各有特色的工具值得收藏:
- regexr.com:速查表做得最好,鼠标悬停看每个符号含义,社区有大量实战模式可参考。
- regexone.com:免费互动教程,30 分钟过一遍基础,适合完全零基础。
- regexcrossword.com:正则填字游戏,边玩边练,提升对模式的直觉。
- debuggex.com:把正则可视化为 railroad 图,分支结构一目了然,适合阅读复杂正则。
- IDE 集成:VS Code、JetBrains 系列都内置正则支持(查找替换勾选正则),配合插件还能高亮解释。
经典书籍与文档
系统性学习推荐这几本书,从入门到精通都有覆盖:
// 推荐学习资源
// === 网站 ===
// 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 官方文档,准确度最高。
实战建议(全系列总结)
- 从简单开始:先写最严的版本,再慢慢放宽边界。复杂正则一次写对几乎不可能,要迭代。
- 加注释:大正则用
x标志(PCRE/Python)允许写空白和注释,或在代码里逐段拼接 + 注释。 - 不要用正则解析 HTML/JSON:虽然有著名的 StackOverflow 段子,但实际请用 cheerio、jsdom、JSON.parse 等专用解析器。
- 警惕灾难性回溯:嵌套量词是性能炸弹,生产代码务必测试大输入。
- 能不写就不写:有时候一个 if 加两个字符串方法比正则更清晰,代码可读性优先。
正则是那种"两周不用就忘光"的技能,但熟练后能省下大量字符串处理代码。坚持每次遇到文本匹配问题都用正则解决,一年后你会成为团队里"正则翻译官"——别人看到一串乱码求你解释,你三秒就能讲清。
恭喜你读完整个系列!欢迎回到目录复习 → 正则教程目录
← 上一篇 常用正则模式
← 返回 正则教程目录