全部指南
开发者

正则替换:使用捕获组重新排列文本

无需重新输入即可交换年、月、日——并了解为何匹配的日期仍可能无效。

要把 2026-10-15 改成 15/10/2026,可以分别捕获年、月、日,然后按不同顺序重新排列这些捕获内容。无需为每个日期手动输入新的替换文本。

此示例只改变文本格式,不检查每个日期是否真实存在。当你在电子表格中使用结果或发布时,这一点很重要。

从小样本开始,包含一个无效日期

打开 正则表达式游乐场,将以下内容粘贴到 测试文本 中:

Launch: 2026-10-15
Review: 2026-11-02
Invalid: 2026-99-99
Short: 2026-1-5

在 正则表达式 中,输入以下模式(不带斜杠分隔符):

\b(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})\b

三个命名组分别捕获四位数字、两位数字和两位数字。单词边界可防止它在更长的单词字符序列中匹配,但这并不能使其成为日历验证器。

在 选项 下,保持 查找所有匹配 启用。这就是 g 标志。你应该会看到三个匹配项;最后一行中的一位数月和日不符合该模式。

在替换中重新排列捕获内容

选择 替换,并在 替换为 中输入以下内容。在手机上,请先打开 结果 以进入替换视图。

$<day>/$<month>/$<year>

替换预览应显示:

Launch: 15/10/2026
Review: 02/11/2026
Invalid: 99/99/2026
Short: 2026-1-5

无效日期也发生了变化。仅计算数字的模式无法知道一个月的天数。当日历有效性重要时,请使用日期解析器;当你已知输入日期有效且只需要不同的显示格式时,请使用此替换。

禁用 查找所有匹配 只会更改第一个日期。工具的匹配计数将从三个减少到一个。如果替换似乎在第一次出现后停止,请在重写模式之前检查该标志。

编号组同样有效

对于更短的模式,请移除名称:

\b(\d{4})-(\d{2})-(\d{2})\b

然后使用此替换:

$3/$2/$1

对于此示例,它产生相同的输出。组编号遵循左到右的捕获左括号顺序。如果你预计稍后编辑模式,命名组更易于维护。

游乐场使用 JavaScript 替换语法。在替换字段中,$1 插入第一个捕获,$<year> 插入命名捕获,$& 插入整个匹配,$$ 插入字面美元符号。MDN 的替换参考 列出了这些形式。其他编辑器或正则表达式引擎可能使用不同的替换表示法。

保留源文件并检查异常

下载 示例输入、所有匹配输出 和 仅首次匹配输出 进行比较。设置文件 保留了模式和替换;该 JSON 中的双反斜杠是字符串转义,不是要粘贴到模式字段中的额外反斜杠。

2026年10月15日,我们通过游乐场相同的评估函数运行了这些示例。两种捕获风格产生相同的输出;关闭全局标志更改了一个匹配,无效日期仍然匹配。结果记录 包含这些检查以及文件的哈希值。

对于实际草稿,请保留一份未修改的副本,并在测试中包含一些不应更改的行。看似合理的预览并不能证明每个替换都是正确的。