正则表达式测试器

在下方输入正则表达式和测试字符串。匹配结果实时高亮显示。支持JavaScript regex标志。所有处理均在浏览器中本地完成。

/ / g
已复制!
#位置匹配分组

正则表达式标志

标志描述
g全局 - 查找所有匹配项,而不仅仅是第一个
i不区分大小写匹配
m多行 - ^$ 匹配行边界
sDotall - . 匹配换行符
uUnicode - 启用完整Unicode匹配
y只在上一次匹配结束的位置继续匹配

每一处匹配都会列出它的起始位置和捕获到的全部分组,具名分组也在内,而这通常正是你要核对的东西。替换模式把同一个模式送进标准的替换语法,所以 $1 和 $ 的行为与你自己代码里完全一致。匹配数量设了上限,否则一个在每个位置都能匹配的模式会造出比页面画得动还多的表格行。

又在手工整理数据?

每次都要在浏览器标签页里修一遍的数据,本该交给代码。我们构建在系统之间搬运数据的集成、解析器和服务,也修好那些在半路上悄悄把数据弄坏的东西。

告诉我们你在搬什么

常见问题

为什么我的模式只找到第一处匹配?
因为 g 标志没开。不开的话,正则表达式按设计就在第一处匹配停下,这在做有效性校验时正合适,在扫一整篇文档时就不合适了。打开它,所有匹配都会列出来。
支持具名分组吗?
支持。编号分组和具名分组都会在每一处匹配的表格里出现,所以用了 (?<year>\d{4}) 的模式会把 year 和分组 1 一起显示出来。你要核对的通常正是这个,而不是模式究竟匹不匹配。
替换模式怎么处理 $1?
和你自己的代码完全一样,因为它把模式和替换串交给语言自带的替换函数。所以 $1 和 $<name> 指向分组,$& 是整个匹配,$$ 是一个真正的美元符号。
为什么它不再往下列匹配了?
这里设了上限,因为一个在每个位置都能匹配的模式,会给每个字符生成一行,表格在变得有用之前很久就已经没法看了。撞到上限时,通常说明模式比你原本想的宽。
我的模式把页面卡住了,为什么?
有些模式会发生灾难性回溯:像 (a+)+ 这样的嵌套量词,遇到一段差一点就能匹配的文本,可能耗费指数级时间。这是模式本身的性质,不是本页面的问题,而且值得知道,因为同一个模式在你的服务器上也会这样。