正则表达式测试
在浏览器本地测试 JavaScript 正则,支持 g/i/m/s/u/y 标志、匹配数量、捕获组、命名组、行列位置和原生替换预览。
/
/g
测试文本
字符
0 / 50,000
匹配结果
输入模式开始匹配
替换文本
字符
0 / 50,000
替换预览
快速开始
常见使用场景
数据提取
用 (\\d{4}-\\d{2}-\\d{2}) 提取日期,用 ([\\w.]+@[\\w.]+) 提取邮箱
格式验证
编写正则后粘贴多条样本,快速验证模式是否精准命中目标格式
批量替换
用捕获组重组内容。例如将「姓 名」改为「名, 姓」— 模式 (\\S+)\\s+(\\S+),替换 $2, $1
命名分组
用 (?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2}) 提取日期,再用 $<year>/$<month>/$<day> 重组
语法学习
输入不同模式观察匹配行为,直观理解量词、锚点、字符类的效果
多行处理
开启 m 标志后 ^ 和 $ 按行匹配,适合处理日志、代码或配置文件
使用建议
限制与兼容性
隐私与安全
常见问题
正则表达式(Regular Expression,简称 regex)是一种用特定语法描述文本模式的工具。你可以把它理解为「高级搜索」——不是搜索一个固定词,而是搜索符合某种规则的所有文本。\n\n例如 \\d{4}-\\d{2}-\\d{2} 可以匹配所有「年-月-日」格式的日期,[\\w.]+@[\\w.]+ 可以匹配邮箱地址。正则表达式广泛用于:文本搜索与提取(从日志中找错误码)、格式验证(检查手机号是否合法)、批量替换(把所有日期从 MM/DD/YYYY 改为 YYYY-MM-DD)。\n\n几乎所有编程语言(JavaScript、Python、Java、Go 等)和大量工具(VS Code、grep、sed)都支持正则表达式,语法大同小异。本工具使用 JavaScript 的 RegExp 引擎,适合在线快速验证和学习。
JavaScript 正则默认只返回第一个匹配项,这是语言规范行为而非工具限制。点击标志栏中的 g 开启全局搜索即可看到全部匹配。\n\n需要注意 g 和 y 的交互:g 从头到尾扫描整个文本,而 y(定点匹配)要求每次匹配必须紧接上次匹配的末尾——如果目标文本中的匹配项之间有间隔字符,y 会在遇到第一个间隔时停止。通常只开 g 不开 y 就够用了。
常见原因有四类: 1. 括号未配对:每个 ( 都必须有对应的 ),每个 [ 都必须有对应的 ]。IDE 可能会自动补全,但本工具仍按你输入的模式测试。 2. 量词位置错误:*、+、?、{n} 必须跟在可重复的元素后面,*+ 或 ?* 这类组合无效;惰性量词应写成 *?、+?。 3. 转义不完整:末尾单独的 \ 无效,必须转义具体字符,例如 \d、\n 或 \\。 4. Unicode 属性未开启 u 标志:\p{L}、\p{Script=Han} 等 property escape 需要启用 u 标志。
这些引用来自 JavaScript 的 String.prototype.replace(): - $1、$2、...、$99:第 1 到第 99 个捕获组的内容。 - $&:完整匹配文本。 - $`: 匹配位置之前的文本。 - $': 匹配位置之后的文本。 - $<name>:命名捕获组 (?<name>...) 的内容。 例如,模式 (\w+)\s(\w+) 匹配「hello world」后,用 $2-$1 替换会得到「world-hello」。如果替换文本里需要字面量 $,请写成 $$。
不同语言的正则引擎主要有三类差异: 1. 语法支持不同:JavaScript 不支持 PCRE 的递归模式 (?R)、条件分支 (?(cond)yes|no) 或原子组 (?>...);Python 的 re 模块也不支持这些,但第三方 regex 模块支持;Java 支持原子组但不支持递归。 2. Unicode 处理不同:JavaScript 的 \w 主要匹配基础拉丁字母、数字和下划线;开启 u 不会让它自动匹配中文。要匹配 Unicode 字母,请使用 \p{L} 等 property escape 并启用 u 标志。 3. 换行语义不同:Python 的 . 默认不匹配 \n(与 JavaScript 相同),Java 的 Pattern.DOTALL 行为类似 JavaScript 的 s 标志。建议先用本工具快速验证 JavaScript RegExp,再用目标语言的实际引擎做最终确认。