跳到正文

正则表达式测试

Regex Tester

把正则跑在示例文本上,实时高亮命中的部分并列出捕获组。

对示例文本运行一个正则表达式,显示每个匹配及其偏移、捕获组,以及它会产生的替换结果。用的是浏览器自己的引擎,所以这里发生的就是你 JavaScript 里会发生的。

🔒 完全在你的浏览器里运行regextestpattern
视图

模式

//g

在字符串的任何位置都能匹配、2 个捕获组。

拿来匹配的文本

所有命中都会列出来。没有 `g` 标志时,`String.replace` 只用第一个。

0处命中

耗时

0.0 ms

ask@example.com, 문의@example.co.kr and no-reply+tag@mail.example.org

替换

`$1`、`$<name>`、`$&`、`` $` ``、`$'` 和 `$$` 都会展开,跟 `String.replace` 展开它们的方式完全一样。

怎么用

  1. 写模式并设置标志

    标志按钮是要紧的那六个:global、ignore case、multiline、dotAll、unicode 和 sticky。顶部的字面量就是你会粘进代码里的东西。

  2. 粘贴你实际手上的文本

    匹配在原处高亮,颜色交替,相邻的匹配能分得开;同时列在一张表里,带每个组的值——包括没有参与匹配的组。

  3. 试试替换

    `$1`、`$<name>`、`$&`、`` $` ``、`$'` 和 `$$` 都严格按 `String.replace` 的方式展开,所以预览就是真实的输出。

常见问题

为什么页面警告缺少 `g` 标志?

因为列表显示的是每一个匹配,但没有 `g` 的话你的代码不会。`String.replace` 只改第一个,`matchAll` 直接抛错。这就是你在这里看到的和你的程序做的之间的差别。

这和 Python 或 PCRE 是同一个引擎吗?

不是——是 JavaScript 的。后行断言、命名组和 `\p{…}` 这里支持,但原子组、占有量词、递归和内联标志组不支持,字符类的行为在某些地方也不同。在这里能用的模式在别处仍然可能失败。

我的模式把页面挂住了。

不应该——匹配在 worker 里运行,正是因为一个灾难性回溯的模式没有别的办法中断。跑得太久时运行会被终止并报告,这也是一个有用的信号:在这里会这样的模式,在你的服务器上也会。

为什么 `.` 不匹配我的换行?

因为那是 `s`(dotAll)的用处。没有它,`.` 匹配除行终止符以外的任何东西——而 `m`(multiline)又是另一回事:它改变 `^` 和 `$` 的含义,不改变 `.` 匹配什么。

可以从这些接进来

接下来

这些工具吃得下当前工具的产出,结果可以直接送过去。