正则表达式测试
用自己的文本测试正则表达式,列出每个匹配项的位置与捕获组。可切换到替换模式改写文本,或用提取模式按行取出指定分组。
输入一个模式,粘贴你的文本,就能看到每个匹配项被高亮标出,并附上它的位置和捕获组。切到替换模式可以用替换文本改写内容,或者切到提取模式逐行取出某一个捕获组——这是把模式写进代码之前最快的验证方式。
引擎是浏览器使用的 JavaScript 正则表达式风格,所以结果与你在 Node 或浏览器控制台里得到的一致,命名分组、先行断言和惰性量词都包含在内。全局、忽略大小写、多行、点匹配全部和 unicode 匹配的修饰符都可以选用,而且失控的模式会被中止,不会把标签页卡死。
如何测试正则表达式
输入模式并设置修饰符
粘贴要测试的文本
查看匹配结果,或使用替换与提取模式
常见问题
用的是哪种正则风格?
JavaScript(ECMAScript),与你的浏览器和 Node.js 相同的引擎。为 PCRE、Python 或 Java 写的模式可能需要小幅调整——占有量词和递归不属于这种风格。
为什么我的模式会卡住或中止?
灾难性回溯,通常是 (a+)+ 这类嵌套量词去匹配一长串不匹配的字符串造成的。工具会在固定迭代次数后停止以保护标签页;请简化模式,或者给它加上锚点。
怎么替换文本?
切到替换模式并填入替换内容。$1、$2 或 $<name> 会插入捕获组,所以你可以重排日期、交换字段或者清理日志。
提取模式做什么?
它每行输出一个捕获组,而不是整个匹配项,这正是从一大段文本里抓取邮箱地址、URL 或 ID 时想要的结果。
我的模式里能用换行吗?
只有开启多行或点匹配全部的修饰符才行。默认情况下 . 不匹配换行符,这也是模式在一行上有效、遇到整段文字就失效的常见原因。
我的文本会被上传吗?
不会,匹配在本地运行——文本里含有真实日志数据或客户信息时,这很关键。
一览
| 输入 | 文本 |
|---|---|
| 多个文件 | 否 |
| 运行位置 | 在你的浏览器中——文件永远不会被上传 |
| 离线可用 | 是 — 页面加载完成后 |
| 价格 | 免费,无需注册,无水印 |
转换在哪里悄悄出错
大多数转换缺陷与语法无关,而与含义有关。一列邮编的 CSV 字段会在表格软件猜它是数字的那一刻丢掉前导零;一个很长的 ID 会超出浮点精度;日期会因为先写日还是先写月而意思大变。JSON 的键是无序的,但数组是有序的,排序键的工具不会改变任何东西,而排序数组的工具会改变数据。Unicode 是另一个陷阱:文本可能以 UTF-8、UTF-16 或带字节顺序标记的形式到来,解码器猜错就会把带重音的字符变成乱码。在信任任何转换之前,抽查第一行和最后一行、任何带前导零的字段,以及任何含有引号、逗号或换行的字段。
选择数据格式
JSON 是 API 返回以及程序读取的任何数据的默认格式:它天然处理嵌套结构、数字、布尔值和 null,而且每种语言都能解析它。CSV 更小,能直接打开进表格软件,但它无法表达嵌套,在分隔符、引号规则和字符集上也没有共同标准——而这正是转换出错的地方。XML 冗长,但能承载属性、混合内容和模式,所以它仍然主导着文档格式和遗留系统集成。YAML 对配置来说最易读,但它对空白敏感,还有出人意料的类型强制转换(「no」会变成 false,像 1.10 这样的版本号会变成 1.1)。请选择使用方工具偏好的格式,而不是看起来最漂亮的格式。