正则表达式测试

实时测试 JavaScript 正则表达式:标出每个匹配位置,列出捕获组与命名捕获组,可切换修饰符并预览替换结果,全部在浏览器运行。

/ /g
修饰符

匹配结果

没有匹配结果

# 位置 匹配文本 捕获组

替换

什么是正则表达式?

正则表达式(Regex)是用来描述文本的规则,例如“四个数字、一个连字符、两个数字”。开发中常用来校验输入、搜索日志、提取数据或批量替换文本。这个工具使用浏览器内置的 JavaScript 引擎,结果和浏览器、Node.js 中 String.prototype.match 与 replace 的结果一致。

使用方法

  1. 输入表达式(不用加前后的斜杠),勾选需要的修饰符。
  2. 粘贴要测试的文本,每个匹配处都会标出来;相邻的匹配用不同颜色,方便区分。
  3. 表格列出每个匹配的位置与捕获组。点击某一行,就会在文本中选中该处。
  4. 填写“替换为”即可预览替换结果。捕获组用 $1、$<name>,整段匹配文本用 $&。

示例:转换日期格式

表达式 (?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2}) 会找出 2024-03-15 这类日期,并给三个部分命名。替换为 $<day>/$<month>/$<year> 的结果是:

15/03/2024

常用语法

语法含义
\d一个数字 0-9
\w英文字母、数字或下划线
\s空白字符:空格、Tab、换行
.换行以外的任何字符(开启 s:任何字符)
* + ?0 次以上、1 次以上、0 或 1 次
{2,4}2 到 4 次
^ $文本的开头与结尾(开启 m:每一行)
\b单词边界
[abc] [^abc]a、b、c 其中一个/除此之外的字符
a|ba 或 b
(...)捕获组:替换时用 $1、$2
(?:...)只分组、不捕获
(?<name>...)命名捕获组:替换时用 $<name>
(?=...) (?!...)后面紧跟/后面不是(先行断言)

常见问题

这里用的是哪种正则表达式?

JavaScript(ECMAScript),与浏览器、Node.js 相同。大部分语法在 Java、Python、PHP、Go 中也通用,但有一些差异:Python 的命名捕获组写作 (?P<name>...);写在表达式开头的 (?i) 这类修饰符这里不支持,请改用修饰符复选框。

为什么测试中途提示超时?

有些表达式,特别是 (a+)+$ 这种重复里嵌套重复的写法,会让引擎尝试极大量的组合(称为“灾难性回溯”)。这个工具在后台运行,超过 2 秒就停止,页面不会卡死。请改写表达式、避免嵌套重复,同样的表达式也可能让你的服务器卡死。

反斜杠要写两个吗?

在这里不用,直接输入 \d。复制到 Java、C# 或 JavaScript 代码的字符串里(不是 /.../ 写法)时,每个反斜杠都要写两次,例如 "\\d{4}"。

文本会发送到服务器吗?

不会。匹配与替换全部在你的浏览器中运行,可以放心用不能外传的日志或数据来测试。