正则表达式测试

测试正则表达式,给匹配的地方标上颜色。分组内容和替换结果也能马上看到。

正则表达式和文本

标志

0 个字符・0 行

结果

结果的显示方式

输入正则表达式和文本后,匹配的地方会标上颜色。

处理全部在本设备上完成,输入的内容不会发送到任何地方。

使用 JavaScript(浏览器)的正则表达式。可用的写法与 Python、PHP、Java 等可能略有不同。

觉得好用的话,欢迎分享

遇到问题,或者有“要是能这样就好了”的想法?

使用方法

  1. 1. 输入正则表达式

    在“正则表达式”中输入要查找的模式。\d、[ ] 这类不好输入的符号,点按输入框下方的符号按钮,就会插入到光标位置。也可以在“从常用写法中选择”里选择邮箱地址、日期等模式。点按输入框右上角的“含义”,会逐个列出每个部分匹配什么。

  2. 2. 输入文本

    在下方的“要检查的文本”中粘贴或输入要查找的文本(点按“示例”会填入示例文本)。输入后,下方的“结果”会立即给匹配的地方标上颜色,并显示匹配数量。

  3. 3. 切换标志,查看匹配列表

    关闭“标志”中的“g 全部”后,只查找第一个匹配(重新打开则查找全部)。下方的“匹配列表”会列出每处匹配的位置和分组($1、<year> 等)的内容。点按某一行,会选中上方文本中的该位置。

  4. 4. 只提取匹配的部分

    在“结果”上方选择“提取”,匹配的部分会每行一个地列出来。有分组时,可以在“匹配的整体”选择框中只选 <year> 等分组。打开“去除重复”后,相同的内容会合并为一个;点按“复制提取结果”即可复制,点按“保存为文本”则保存为文件。

  5. 5. 试试替换并复制

    在“结果”上方选择“替换”,在“替换为”中输入 $<day>/$<month>/$<year> 这样的内容,替换后的文本会立即显示。点按“复制替换结果”即可复制。

适用场景

  • 想确认写好的正则对不对

    放进代码之前,用颜色一眼看出它是否只匹配想要的内容,有没有多匹配到别的地方。写好后,还可以选择 Python、PHP、Go 等语言,以能直接粘贴到代码中的形式复制。

    Web 工程师・学习编程的人

  • 想读懂别人写的正则

    把接手的代码或文章里的正则粘贴进来,点击“含义”,就会用“1 个数字,重复 4 次”这样的简短说明,逐个列出每个部分匹配什么。

    阅读代码的人・学习编程的人

  • 想从日志或表格中提取固定格式的内容

    查找邮箱地址、日期、订单号等,用“提取”每行一个地列出来,可以复制,也可以保存为文本文件。

    统计数据的人・客服人员

  • 想不重复地收集分组的部分

    像邮箱地址的域名、URL 的主机名这样,可以只提取用 ( ) 括起来的部分。打开“去除重复”,同一内容出现多次的列表也会合并成一个一个。

    统计数据的人・网站负责人

  • 批量修改前想先试试替换

    在编辑器或表格软件里批量替换之前,先确认使用 $1 等的替换结果。

    整理文本或表格的人

  • 想做表单的输入校验

    一边用各种输入测试,一边写出校验手机号、邮政编码等格式的正则表达式。

    制作表单的人

使用前须知

  • 使用 JavaScript 的正则表达式。Python、PHP、Java、.NET 特有的写法(占有量词 ++、(?i) 等)无法使用。
  • 以其他语言的形式复制时,会在能改写的范围内修正写法上的差异。无法改写的(如 Go 的后行断言)会简短提示,请也在该语言中测试一下。
  • 耗时太长的正则会在 2 秒后停止并提示。停止时,请减少重复的嵌套。
  • 匹配列表只显示前 300 处,标色和提取只到前 5,000 处(数量会一直数到最后)。

关于正则表达式测试

正则表达式是用 \d{4}、[\w.]+@[\w.]+ 这样简短的符号,来描述“连续 4 个数字”“@ 两边的字母和数字”这类字符格式的方法。它在搜索、替换、输入校验等许多程序和编辑器中都会用到,但只要写错一点,就可能匹配到意想不到的地方。

本工具在你每次输入时,都会用浏览器的 JavaScript 正则当场检查,并给匹配的地方标上颜色。每处匹配中分组(用 ( ) 括起来的部分)和命名分组((?<名称>…))的内容也会列出来,方便确认想取出的部分是否正确。即使是 (a+)+ 这样算不完的写法,也会在单独的流程中限时检查,页面不会卡住。

标志的区别
打开后常用场合
g(全部)查找所有匹配的地方提取・全部替换
i(忽略大小写)把 A 和 a 当作同一个字母搜索英文单词
m(逐行)^ 和 $ 匹配每行的开头和结尾逐行检查・日志
s(. 也匹配换行). 也能匹配换行跨越多行的内容
u(Unicode)把表情符号当作 1 个字符,可使用 \p{…}含汉字或表情符号的文本

常见问题

整理了测试正则表达式时容易困惑的地方。

输入的文本和正则表达式会被发送到别处吗?

不会。所有检查都在你设备上的浏览器中完成,输入的文本和正则表达式不会发送到服务器,也不会被保存。含有公司内部日志或个人信息的文本也可以放心使用。

使用的是哪种语言的正则?

JavaScript(浏览器的 RegExp)的正则表达式。命名分组 (?<名称>…)、后行断言 (?<=…)、\p{…}(u 标志)等都可以使用。与 Python、PHP、Java 等在细节写法上可能不同,在其他语言中使用时,也请查看该语言的文档。

可以用在 Python 或 PHP 的代码里吗?

可以。在“正则表达式”输入框的右上角,从 JavaScript、Python、PHP、Java、Ruby、Go 中选择语言,再点击复制按钮,就会以该语言的代码形式复制。Python 的 (?P<名称>…)、Ruby 的 \A・\z、Go 的 (?i) 这类写法上的差异会自动修正。像 Go 的后行断言这样在该语言中无法表达的,会在输入框下方简短提示。选择的语言下次打开时也会保留。

可以粘贴“/abc/gi”这种形式吗?

可以。在“正则表达式”为空时粘贴 /abc/gi 形式的内容,会自动拆成正则部分和标志。反过来,在输入框右上角选择“JavaScript”并点击复制按钮,可以把当前的正则以 /…/ 形式复制,直接粘贴到 JavaScript 代码中。

可以查看正则表达式的含义吗?

点击“正则表达式”输入框右上角的“含义”,会把正则拆成各个部分,用“1 个数字,重复 4 次”“名称为 year 的分组”这样的说明,逐个列出匹配什么。分组内部会缩进显示,也能确认括号的对应关系。

可以只把匹配的部分列成清单吗?

选择“提取”后,匹配的部分会每行一个地列出来。有分组时,也可以只选该部分($1、<名称>)。用“去除重复”把相同的内容合并为一个,然后复制或保存为文本文件。标志 g 关闭时,只有第一个匹配。

在哪里查看分组的内容?

右侧的“匹配列表”中,会按每处匹配列出 $1、$2 …(命名分组为 <名称>)的内容。没有匹配到的分组会显示“(未匹配)”。

替换时可以用哪些写法?

选择“替换”后,在“替换为”中可以使用 $1、$2 …(分组)、$<名称>(命名分组)、$&(匹配到的整体)、$$($ 本身)。标志 g 打开时替换全部,关闭时只替换第一个。

显示“耗时太长,已停止”

像 (a+)+、(.*)* 这样在重复中再套重复的正则,遇到不匹配的文本时,计算量可能呈爆炸式增长(灾难性回溯)。为了不让页面卡住,会在 2 秒后停止。请把重复合并成一层,或用 [^,]* 代替 .*,缩小可匹配的字符范围。

怎样不区分大小写地查找?

打开“标志”中的“i 忽略大小写”。A 和 a、A 和 a 这样的大写和小写字母会被当作同一个字母查找(全角和半角仍然视为不同的字符)。

^ 和 $ 不能逐行匹配

^ 和 $ 默认只匹配整段文本的开头和结尾。要逐行匹配,请打开“标志”中的“m 逐行”。

可以查找汉字吗?

可以。“从常用写法中选择”里有“汉字”。汉字使用的 \p{Script=Han} 需要 u 标志,所以选择后 u 也会自动打开。打开 u 后,还可以用 \p{L} 匹配任何文字的字母。

可以免费使用吗?

免费。无需注册和安装,也没有广告。可以不限次数、不限文本长度地使用。