String.replace()
是 JavaScript 字符串对象的一个方法,用于在字符串中执行查找和替换操作。它返回一个新字符串,其中部分或全部匹配模式被替换为指定的替换值。
基本语法:
str.replace(regexp|substr, newSubstr|function)
substr
:表示要被替换的子字符串regexp
:表示要匹配的模式newSubstr
:用于替换匹配项的字符串function
:用于创建新子字符串的函数let str = "Hello World";
let newStr = str.replace("World", "JavaScript");
console.log(newStr); // "Hello JavaScript"
应用场景:简单的固定字符串替换
let str = "The quick brown fox jumps over the lazy dog";
let newStr = str.replace(/the/gi, "a");
console.log(newStr); // "a quick brown fox jumps over a lazy dog"
应用场景:不区分大小写替换、模式匹配替换
let str = "Doe, John";
let newStr = str.replace(/(\w+), (\w+)/, "$2 $1");
console.log(newStr); // "John Doe"
应用场景:字符串重组、格式化
let str = "The temperature is 25C today";
let newStr = str.replace(/(\d+)C/, function(match, p1) {
return (parseInt(p1) * 9/5 + 32) + "F";
});
console.log(newStr); // "The temperature is 77F today"
应用场景:需要动态计算替换内容的场景
原因:当使用字符串作为第一个参数时,replace()
默认只替换第一个匹配项
解决方案:使用正则表达式并添加全局标志 g
let str = "apple orange apple";
// 错误方式 - 只替换第一个apple
str.replace("apple", "banana"); // "banana orange apple"
// 正确方式
str.replace(/apple/g, "banana"); // "banana orange banana"
原因:某些字符在正则表达式中有特殊含义
解决方案:转义特殊字符或使用字符串替换
let str = "1 + 1 = 2";
// 错误方式 - +在正则中有特殊含义
str.replace(/1 + 1/, "3"); // 不会匹配
// 正确方式1 - 转义
str.replace(/1 \+ 1/, "3"); // "3 = 2"
// 正确方式2 - 使用字符串替换
str.replace("1 + 1", "3"); // "3 = 2"
原因:替换函数的参数顺序和含义不明确
解决方案:了解回调函数参数顺序:
let str = "abc12345";
str.replace(/(\d+)/, function(match, p1, offset, string) {
console.log(match); // "12345" - 完整匹配
console.log(p1); // "12345" - 第一个捕获组
console.log(offset); // 3 - 匹配开始位置
console.log(string); // "abc12345" - 原始字符串
return "x";
});
原因:JavaScript 字符串是不可变的,replace()
返回新字符串而不修改原字符串
解决方案:将结果赋值给变量
let str = "Hello";
str.replace("H", "J");
console.log(str); // 仍然是 "Hello"
// 正确方式
let newStr = str.replace("H", "J");
console.log(newStr); // "Jello"
let str = "2023-05-15";
let newStr = str.replace(/(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})/, "$<day>/$<month>/$<year>");
console.log(newStr); // "15/05/2023"
let str = "The numbers are 123, 456, and 789";
let newStr = str.replace(/\d+/g, function(match) {
return parseInt(match) * 2;
});
console.log(newStr); // "The numbers are 246, 912, and 1578"
let html = "<div class='test'>Hello</div>";
let newHtml = html.replace(/<[^>]+>/g, "");
console.log(newHtml); // "Hello"
String.replace()
是 JavaScript 中处理字符串替换的强大工具,掌握其各种用法可以大大提高字符串处理的效率和灵活性。