replace 默认仅替换首个匹配,需正则加 g 标志才全局替换;replaceall 默认全量替换,传字符串最安全,传正则必须带 g 标志,不支持回调,且兼容性较差(ie 不支持)。

JavaScript 中的 replace 和 replaceAll 都用于字符串替换,但行为逻辑、适用场景和兼容性差异明显——选错方法容易导致只替换了第一个、报错或在旧浏览器中直接失效。
replace 默认只换第一个,全局替换必须靠正则 + g 标志
replace 的设计初衷是单次替换。传入字符串时,永远只处理首个匹配:
-
"aabbcc".replace("b", "x")→"aaxbcc"(仅第一个"b"被替换) - 想全部替换?必须用正则并显式加
g标志:"aabbcc".replace(/b/g, "x")→"aaxxcc" - 大小写不敏感就再加
i:"AaBbCc".replace(/b/gi, "x")→"AaxxCc" - 直接传字符串,无论调用多少次或加什么参数,都不会变成全局替换
replaceAll 默认全量替换,但对正则有硬性要求
replaceAll 是 ES2021 新增方法,语义明确:只要匹配,就全换。
详细的 Three.js 3D 图形参考,涵盖场景设置、相机、几何体、材质、光照、动画、控制器、加载器、数学工具和调试。
- 传字符串最安全:
"aabbcc".replaceAll("b", "x")→"aaxxcc" - 传正则时,必须带
g标志,否则运行时报错:"aabbcc".replaceAll(/b/, "x")→TypeError - 即使写了
g,也不影响结果,但不能省:"aabbcc".replaceAll(/b/g, "x")合法且等效 - 它不支持回调函数,所有替换值只能是静态字符串
特殊字符处理方式不同
点号 .、星号 * 等在字符串模式下就是字面量;一旦进入正则,就变成元字符,需转义。
- 用字符串搜索:
"a.b.c".replace(".", "x")→"axb.c"(只换第一个点) -
"a.b.c".replaceAll(".", "x")→"axbxc"(三个点全换,按字面匹配) - 若用正则想匹配真实点号,必须转义:
/\./g,否则.会匹配任意字符
浏览器兼容性与实际选用建议
不是所有环境都能用 replaceAll。
-
replaceAll在 IE 完全不支持;Chrome 85+、Firefox 78+、Safari 13.1+ 才可用 - 需兼容老环境(如企业内网 IE11 或旧版安卓 WebView)→ 坚持用
replace(/pattern/g, ...) - 现代项目、明确支持 ES2021 → 优先用
replaceAll("abc", "xyz"),语义清晰、不易出错 - 需要捕获组、动态生成替换内容(如日期格式转换)→ 只能用
replace+ 正则 + 回调函数










