replaceAll 是 JavaScript 中用于批量、全局替换字符串的方法,支持纯字符串匹配避免正则转义风险,但需注意正则参数必须带 g 标志,多关键词替换需结合 reduce 实现,且仅兼容 ES2021 及以上环境。

replaceAll 是 JavaScript 中专门用于批量、全局替换字符串的方法,它比传统的 replace()(配合正则表达式)更直观、更安全,尤其适合处理不含正则特殊字符的简单批量替换场景。
支持直接替换所有匹配子串,无需正则转义
当你要把字符串中所有出现的 "abc" 替换成 "xyz",用 replaceAll 只需一行:
-
"aabcabccabc".replaceAll("abc", "xyz")→"xyzxyzxyz" - 而用
replace(/abc/g, "xyz")虽然结果相同,但若替换内容含.、*、$等正则元字符,就必须手动转义,容易出错 -
replaceAll把搜索值当作纯字符串处理,自动规避正则陷阱,更适合动态内容替换(比如用户输入的关键词)
不支持正则表达式,但可搭配 RegExp 实现灵活匹配
replaceAll 的第一个参数只能是字符串或 RegExp,但注意:如果传入正则,它**必须带有 g 标志**,否则会报错:
- ✅ 正确:
"hello world".replaceAll(/l/g, "x")→"hexxo worxd" - ❌ 错误:
"hello".replaceAll(/l/, "x")→ 抛出TypeError - 若需大小写不敏感,用
/l/gi;若要匹配单词边界,仍得靠正则,如replaceAll(/\bcat\b/g, "dog")
批量替换多个不同关键词?需组合使用循环或 reduce
replaceAll 本身只支持单次“一换一”,要实现多组替换(如把 "apple"→"red","banana"→"yellow"),需自行封装逻辑:
立即学习“Java免费学习笔记(深入)”;
- 用
Object.entries()+reduce()链式调用:
const text = "I like apple and banana"; - 注意顺序:若替换项存在包含关系(如
"a"和"ab"),应先替换长的,避免被短的提前截断
const map = { apple: "red", banana: "yellow" };
const result = Object.entries(map).reduce((str, [old, newStr]) => str.replaceAll(old, newStr), text);
// → "I like red and yellow"
兼容性提醒:需检查运行环境是否支持
replaceAll 是 ES2021 新增方法,在 Node.js 15.0+ 和现代浏览器(Chrome 85+, Firefox 78+, Safari 13.1+)中可用。旧环境可:
- 用
replace(new RegExp(escapeRegex(str), "g"), newStr)手动模拟(需先转义正则特殊字符) - 引入 polyfill,例如通过
core-js或 MDN 提供的简易实现 - 构建工具(如 Babel)开启相应 preset 可自动降级










