$& 是 replace() 中代表完整匹配子串的特殊占位符,字面量为 $&(HTML 中需转义),可直接插入替换字符串,如 /\d+/g 替换为 "[$&]" 将数字包裹方括号。

可以通过 $& 在 replace() 的替换字符串中直接插入**整个匹配到的子串**,无需额外捕获或回调函数。
什么是 $&?
$& 是 replace() 支持的特殊替换占位符,代表当前正则表达式匹配到的**完整原始文本**(即 match[0])。它不是 HTML 实体,这里的 & 就是字面量 & 字符,所以写成 $& —— 但在 HTML 环境中需转义为 $& 才能正确显示。
基本用法示例
比如把所有连续数字用方括号包裹:
const str = "abc123def4567ghi"; str.replace(/\d+/g, "[$&]"); // "abc[123]def[4567]ghi"
这里 $& 自动替换成每次匹配的数字串 "123"、"4567",简洁又直观。
对比其他占位符和常见误区
-
$&对应完整匹配;$1、$2对应捕获组,没分组时它们为空 - 若正则无
g标志,只替换第一个匹配,$&仍生效,但仅一次 - 在字符串替换中不能动态计算 —— 如需逻辑处理(如转大写),得改用函数作为第二个参数:
replace(/pattern/, (match) => match.toUpperCase()) - 注意不要误写成
$0或$&(带分号)当替换内容——浏览器会按字面处理,不解析
实用小技巧
- 高亮关键词:
text.replace(/keyword/gi, "$&") - 补全缺失空格:
"a,b,c".replace(/,/g, ", ") → "a, b, c"(这里$&就是逗号本身) - 原样保留并加前缀:
"id123".replace(/id(\d+)/, "user-$&") → "user-id123"










