replace默认只替换第一个匹配项,replaceAll则全局替换所有匹配项;replace支持正则(含g、i等标志)和函数替换,replaceAll仅支持字符串或正则(不支持g标志)及函数替换,且兼容性较弱。

JavaScript 中 replace 默认只替换第一个匹配项,而 replaceAll 会替换所有匹配项——但要注意:两者对参数类型和正则标志的处理有关键区别。
replace:默认只换第一个,用正则可全替换
replace 接收两个参数:搜索值(字符串或正则)和替换值(字符串或函数)。若传入普通字符串,它只会替换首次出现的位置:
"a b a c a".replace("a", "x"); // "x b a c a"想全局替换,必须用带 g 标志的正则表达式:
"a b a c a".replace(/a/g, "x"); // "x b x c x"
注意:如果用字符串作搜索值,不能加 g(会报错),且无法忽略大小写——要用正则并加上 i 标志:
立即学习“Java免费学习笔记(深入)”;
-
"Apple apple".replace(/apple/gi, "orange")→"orange orange" -
"Apple apple".replace("apple", "orange")→"Apple orange"(只换第二个,且大小写敏感)
replaceAll:更直观的全量替换,但有限制
replaceAll 是 ES2021 新增方法,语法更直白:两个字符串参数,自动全局替换所有匹配子串:
"a b a c a".replaceAll("a", "x"); // "x b x c x"但它不支持正则表达式作为第一个参数(会直接报错),也不支持正则标志(如忽略大小写、多行匹配等):
-
"Apple apple".replaceAll("apple", "orange")→"Apple orange"(大小写敏感,只换第二个) -
"a a".replaceAll(/a/g, "x")→ 报错:TypeError: First argument to String.prototype.replaceAll must be a string or a RegExp
如需忽略大小写全替换,仍得退回 replace + 正则。
替换值可以是函数,实现动态逻辑
两个方法都支持用函数作为第二个参数,接收匹配内容、分组、索引、原字符串等参数,返回实际替换内容:
"price: 100, tax: 20".replace(/(\d+)/g, (match, num) => Number(num) * 1.1); // "price: 110, tax: 22"
这个能力在 replaceAll 中同样可用,但前提是第一个参数是字符串(此时函数会为每次匹配调用一次):
"cat dog cat".replaceAll("cat", (match) => match.toUpperCase()); // "CAT dog CAT"兼容性与使用建议
replaceAll 在 Node.js 15+ 和现代浏览器(Chrome 85+、Firefox 78+、Safari 13.1+)中可用;旧环境需用 replace + 正则或手动 polyfill。
- 简单字符串全替换,且环境支持 → 优先用
replaceAll,语义清晰不易出错 - 需要忽略大小写、全局匹配、捕获分组或复杂模式 → 必须用
replace+ 正则 - 不确定运行环境时,用
replace(/str/g, ...)更稳妥


















