免费工具 · 在浏览器中运行
正则表达式测试(Regex)
用你的文本测试正则表达式,查看每个匹配、它的位置和捕获分组,还可以测试替换。
使用浏览器中的 JavaScript 正则引擎。最多显示 100 个匹配。
快速解答
输入正则表达式,选择修饰符并粘贴文本。工具会列出每个匹配的位置和捕获分组,并显示替换结果,其中 $1 表示第 1 组。它使用浏览器的 JavaScript 引擎,所以在这里可用的写法在 JavaScript 和 TypeScript 中同样可用;大多数简单写法在 Python、Java 和 PHP 中也通用。
使用方法
- 输入表达式. 不需要两侧的斜杠,例如 \d{3}-\d{4}。
- 选择修饰符并粘贴文本. g 查找全部匹配,i 忽略大小写,m 让 ^ 和 $ 匹配每一行。
- 查看匹配结果. 每个匹配显示位置和分组;填写替换内容可以看到替换后的文本。
示例
查找邮箱地址并捕获用户名和域名:
输入
Pattern: (\w+)@(\w+)\.com Flags: g
Text: mail sara@example.com or ali@test.com输出
2 个匹配
1. sara@example.com @5 $1=sara $2=example
2. ali@test.com @25 $1=ali $2=test常见错误及解决方法
Invalid regular expression: Unterminated group- 有一个 ( 没有对应的 )。检查括号数量,或用 \( 匹配括号本身。
Invalid regular expression: Nothing to repeat- *、+ 或 ? 等量词前面没有内容,例如 *abc。要匹配这个字符本身,请写成 \*。
只找到了第一个匹配- g 修饰符没有开启。勾选 g 以查找全部匹配。
页面卡住了- 像 (a+)+$ 这样的嵌套量词,在几乎匹配的文本上会引发灾难性回溯。去掉嵌套或让表达式更具体。
常见问题
g、i、m、s、u 修饰符分别是什么意思?
g 查找所有匹配而不只是第一个;i 忽略大小写;m 让 ^ 和 $ 匹配每行的开头和结尾;s 让 . 也匹配换行;u 启用完整的 Unicode 匹配。
为什么只找到一个匹配?
没有 g 修饰符时,JavaScript 找到第一个匹配就停止。请勾选 g。
怎么匹配邮箱地址?
实用的写法是 [\w.+-]+@[\w-]+\.[\w.]+。用正则完整验证所有可能的邮箱并不现实,更好的做法是发送确认邮件。
替换时怎么使用捕获分组?
把表达式的一部分放进括号,在替换内容里用 $1、$2 等引用。命名分组 (?<year>\d{4}) 用 $<year> 引用。
怎么匹配点号或括号本身?
在前面加反斜杠:\. 匹配点号,\( 匹配括号。不加反斜杠时,. 匹配任意字符。
.* 和 .*? 有什么区别?
.* 是贪婪的,尽量多匹配;.*? 是非贪婪的,尽量少匹配。想在第一个闭合标签或引号处停下时用非贪婪写法。
怎么匹配中文字符?
可以用 [\u4e00-\u9fa5] 匹配常用汉字,或者勾选 u 后用 \p{Script=Han} 匹配所有汉字。
这里的结果适用于 Python 吗?
大部分适用。基本语法相同,区别包括命名分组(旧版 Python 写作 (?P<name>))和部分修饰符。
为什么有些表达式会让页面卡住?
像 (a+)+ 这样的嵌套量词,在几乎匹配的文本上可能需要指数级时间,这叫灾难性回溯。请简化表达式。
我的文本会被上传吗?
不会。正则表达式在你的浏览器中运行。