Sublime中\d+查不到数字是因为正则开关未启用,需点击右下角.图标或按Alt+R/Cmd+Alt+R开启;查找用\1,替换用$1;跨行匹配需显式包含\r\n;常用场景如加前缀用\b\d+\b→id_$0,改单位用(width:\s)\d+→$1$0px。

为什么 \d+ 查不到数字?模式根本没开
写好 \d+ 却一条都不高亮,不是正则写错了,是 Sublime 默认关着正则开关。它把 \d 当成两个字符:反斜杠 + 字母 d,而不是“任意数字”。必须手动启用——点查找框右下角的 .* 图标,或按 Alt+R(Windows/Linux)、Cmd+Alt+R(macOS)。右下角显示 .* 且图标变蓝才算生效。
替换数字时,\1 和 $1 到底该用哪个?
捕获组引用在查找和替换中规则不同:
- 查找框里写捕获组,用
(\d+)没问题,但不能用$1—— 这里只认\1(虽然实际很少需要在查找里反向引用) - 替换框里必须用
$1,写\1会原样输出字面量\1 -
${1}或$1abc都合法;但$$1会输出$1字符串(双美元转义)
跨行匹配数字为什么会失败?
\d+ 本身不跨行,但如果你的数字被换行符隔开(比如 123\n456),默认模式下它只会分别匹配 123 和 456,不会当整体处理。真要跨行匹配连续数字串,得显式覆盖换行:
- 安全写法:
[\d\r\n]+或更准一点:\d+(?:\r?\n\d+)* - 别依赖
. matches newline选项——它会让.*变得极度贪婪,容易卡死,尤其在大文件里 - 如果只是想“找数字并忽略中间换行”,通常应先清理换行,而不是让正则硬扛
批量加前缀、改格式,这些写法最常用
实际编辑中,数字替换几乎都带上下文。几个高频例子直接抄:
- 给所有独立数字加
id_前缀:
查找:\b\d+\b(\b防止匹配到abc123def中的123)
替换:id_$0($0是整个匹配,不是$1) - 把
width: 100改成width: 100px:
查找:(width:\s*)\d+
替换:$1$0px - 提取 JSON 里的数值并四舍五入(需配合外部工具):
查找::"(\d+\.\d{3,})"→ 先确保能稳定捕获,再导出处理
真正容易卡住的,从来不是 \d 会不会匹配小数点,而是括号没闭合、. 忘了转义成 \.、或者状态栏明明显示 .* 却误点了旁边那个 AB 按钮切回了纯文本模式——建议每次替换前,先用 Ctrl+F 看一眼高亮是否如预期。

















