正则表达式解读
Regex Explainer
把正则拆成一棵带标注的树,让每一段究竟匹配什么变成可读的。
把一个正则表达式拆成一棵树,说明每一部分做什么——每个组、量词、字符类和断言,按模式本身的嵌套方式排列。它和测试器是同一个界面、打开在解读标签上,因为读一个模式和运行它是同一件事。
模式
在字符串的任何位置都能匹配、2 个捕获组。
每一段各做什么
([\w.+-]+)@([\w-]+\.[\w.-]+)按顺序
这些必须一个接一个地全部匹配上,中间不能有别的东西。
([\w.+-]+)第1个捕获组
匹配里面的模式,并把命中的文本记下来,可以用 `match[1]` 取,替换串里则写 `$1`。
[\w.+-]+按 + 重复
重复一次或更多次,但尽量多取,只有后面匹配不上时才往回让。
[\w.+-]这个集合里的任意一个字符
正好匹配一个字符,取下列各项中在输入里最先出现的那个。
在类里面,`.` 就是一个句点。它在这里不表示「任意字符」,转义与否都一样。
\w任意一个单词字符
就是 `[A-Za-z0-9_]`。
只限 ASCII。对 JavaScript 正则来说,`é`、`한` 和 `ß` 都不是单词字符,所以 `\w+` 匹配不上韩文或带重音的词。
.字符 “.” (U+002E)
完全照原样匹配,大小写也算。
+字符 “+” (U+002B)
完全照原样匹配,大小写也算。
-字符 “-” (U+002D)
完全照原样匹配,大小写也算。
@字符 “@” (U+0040)
完全照原样匹配,大小写也算。
([\w-]+\.[\w.-]+)第2个捕获组
匹配里面的模式,并把命中的文本记下来,可以用 `match[2]` 取,替换串里则写 `$2`。
[\w-]+\.[\w.-]+按顺序
这些必须一个接一个地全部匹配上,中间不能有别的东西。
[\w-]+按 + 重复
重复一次或更多次,但尽量多取,只有后面匹配不上时才往回让。
[\w-]这个集合里的任意一个字符
正好匹配一个字符,取下列各项中在输入里最先出现的那个。
\w任意一个单词字符
就是 `[A-Za-z0-9_]`。
只限 ASCII。对 JavaScript 正则来说,`é`、`한` 和 `ß` 都不是单词字符,所以 `\w+` 匹配不上韩文或带重音的词。
-字符 “-” (U+002D)
完全照原样匹配,大小写也算。
\.字符 “.” (U+002E)
完全照原样匹配,大小写也算。
这里的反斜杠是多余的——这个字符在这个位置没有特殊含义。
[\w.-]+按 + 重复
重复一次或更多次,但尽量多取,只有后面匹配不上时才往回让。
[\w.-]这个集合里的任意一个字符
正好匹配一个字符,取下列各项中在输入里最先出现的那个。
在类里面,`.` 就是一个句点。它在这里不表示「任意字符」,转义与否都一样。
\w任意一个单词字符
就是 `[A-Za-z0-9_]`。
只限 ASCII。对 JavaScript 正则来说,`é`、`한` 和 `ß` 都不是单词字符,所以 `\w+` 匹配不上韩文或带重音的词。
.字符 “.” (U+002E)
完全照原样匹配,大小写也算。
-字符 “-” (U+002D)
完全照原样匹配,大小写也算。
标志
- g —
global - 不会在第一处命中就停下,而是全部找出来。代价是 `.test()` 和 `.exec()` 会在两次调用之间推进 `lastIndex`,「隔一次就失败一次」通常就是这么来的。
怎么用
粘贴你继承下来的模式
配置文件里那条谁也不记得是谁写的。它是被解析的,不是被模式匹配的,所以拆解遵循真实的结构。
顺着树往下读
每个节点显示源片段、它是什么、它做什么。说明会标出常让人吃惊的部分——嵌套的量词、一个本不必捕获却在捕获的组。
切到「测试」核对你的理解
模式会一起带过去。理解一个正则和确认它做的是你以为的事是两个不同的步骤,第二步是便宜的那个。
常见问题
嵌套量词上的警告是什么意思?
像 `(a+)+` 这样的东西给引擎指数级多的方式来切分同一段文本,所以一个不匹配的输入可能花的时间比宇宙年龄还长。大多数正则表达式拒绝服务背后就是这个形状。
为什么它告诉我某个组是捕获的?
因为一个你不使用的捕获组占一个位置,还会把你使用的那些组的编号挪位。`(?:…)` 分组而不捕获,让 `$1` 继续指向你想要的东西。
它也解释标志吗?
解释,在单独的面板里——你设置的每个标志、它的名字,以及它改变什么。`m` 和 `s` 尤其值得读,因为它们的名字让人以为是对方的行为。
可以从这些接进来
正则表达式测试
Regex Tester
把正则跑在示例文本上,实时高亮命中的部分并列出捕获组。
JSON 格式化与校验
JSON Formatter & Validator
把 JSON 美化成缩进形式或压成一行,校验语法并直接指出出错的行和列。
YAML 格式化与校验
YAML Formatter & Validator
统一 YAML 缩进并校验语法,把会让解析器崩掉的制表符和锚点错误标出来。
TOML 格式化与校验
TOML Formatter & Validator
格式化并校验 TOML,统一表的排列顺序和内联表的写法。
接下来
这些工具吃得下当前工具的产出,结果可以直接送过去。
查找与替换
Find & Replace
按字面、整词或正则表达式替换文本,支持捕获组,并把每一处命中先预览出来。
正则表达式测试
Regex Tester
把正则跑在示例文本上,实时高亮命中的部分并列出捕获组。
模式提取
Pattern Extractor
从一大段文本里把所有邮箱、网址、数字、日期或自定义正则的命中项抽成一份列表。
Base64 编码解码
Base64 Encoder & Decoder
对文本和文件做 Base64 与 Base64URL 编解码,UTF-8 处理正确。
curl 转代码
curl to Code
把一条 curl 命令转成 fetch、axios、Python requests、Go、PHP 或 PowerShell 代码。
文本哈希计算
Text Hash
算出字符串的 MD5、SHA-1、SHA-256、SHA-384、SHA-512 和 CRC-32,输出可选大写或 Base64。