正则表达式测试
测试正则表达式,给匹配的地方标上颜色。分组内容和替换结果也能马上看到。
正则表达式和文本
标志
0 个字符・0 行
结果
结果的显示方式
输入正则表达式和文本后,匹配的地方会标上颜色。
处理全部在本设备上完成,输入的内容不会发送到任何地方。
使用 JavaScript(浏览器)的正则表达式。可用的写法与 Python、PHP、Java 等可能略有不同。
觉得好用的话,欢迎分享
使用方法
1. 输入正则表达式
在“正则表达式”中输入要查找的模式。\d、[ ] 这类不好输入的符号,点按输入框下方的符号按钮,就会插入到光标位置。也可以在“从常用写法中选择”里选择邮箱地址、日期等模式。点按输入框右上角的“含义”,会逐个列出每个部分匹配什么。
在左侧的“正则表达式”中输入要查找的模式。\d、[ ] 这类不好输入的符号,点击输入框下方的符号按钮,就会插入到光标位置。也可以在“从常用写法中选择”里选择邮箱地址、日期等模式。点击输入框右上角的“含义”,会逐个列出每个部分匹配什么。
2. 输入文本
在下方的“要检查的文本”中粘贴或输入要查找的文本(点按“示例”会填入示例文本)。输入后,下方的“结果”会立即给匹配的地方标上颜色,并显示匹配数量。
在左下方的“要检查的文本”中粘贴或输入要查找的文本(点击“填入示例”会填入示例文本)。输入后,右侧会立即给匹配的地方标上颜色,并显示匹配数量。
3. 切换标志,查看匹配列表
关闭“标志”中的“g 全部”后,只查找第一个匹配(重新打开则查找全部)。下方的“匹配列表”会列出每处匹配的位置和分组($1、<year> 等)的内容。点按某一行,会选中上方文本中的该位置。
关闭“标志”中的“g 全部”后,只查找第一个匹配(重新打开则查找全部)。右侧的“匹配列表”会列出每处匹配的位置和分组($1、<year> 等)的内容。点击某一行,会选中左侧文本中的该位置。
4. 只提取匹配的部分
在“结果”上方选择“提取”,匹配的部分会每行一个地列出来。有分组时,可以在“匹配的整体”选择框中只选 <year> 等分组。打开“去除重复”后,相同的内容会合并为一个;点按“复制提取结果”即可复制,点按“保存为文本”则保存为文件。
在右侧上方选择“提取”,匹配的部分会每行一个地列出来。有分组时,可以在“匹配的整体”选择框中只选 <year> 等分组。打开“去除重复”后,相同的内容会合并为一个;点击“复制提取结果”即可复制,点击“保存为文本”则保存为文件。
5. 试试替换并复制
在“结果”上方选择“替换”,在“替换为”中输入 $<day>/$<month>/$<year> 这样的内容,替换后的文本会立即显示。点按“复制替换结果”即可复制。
在右侧上方选择“替换”,在“替换为”中输入 $<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+)+ 这样算不完的写法,也会在单独的流程中限时检查,页面不会卡住。
常见问题
整理了测试正则表达式时容易困惑的地方。
输入的文本和正则表达式会被发送到别处吗?
不会。所有检查都在你设备上的浏览器中完成,输入的文本和正则表达式不会发送到服务器,也不会被保存。含有公司内部日志或个人信息的文本也可以放心使用。
使用的是哪种语言的正则?
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} 匹配任何文字的字母。
可以免费使用吗?
免费。无需注册和安装,也没有广告。可以不限次数、不限文本长度地使用。