JavaScript中String.replace()方法全解析与实战

作者:青柠时间:2026-10-21 22:56:21浏览:220

本文深入解析JavaScript中String.replace()方法的四种使用场景。涵盖字符串直接替换、全局正则替换、正则捕获组引用($1-$9)以及回调函数模式。重点讲解当正则包含捕获组时,回调函数参数的变化规律,并演示如何利用replace实现字符串trim功能。

replace()方法基础参数说明

ECMAScript规范中定义了String对象的replace()方法。该方法接受两个参数:第一个参数可以是RegExp正则表达式对象或普通字符串,第二个参数可以是替换用的字符串或一个回调函数。接下来将详细阐述这几种组合的具体行为。

字符串直接替换与全局正则替换

第一种情况:两个参数均为字符串。


 var text = 'cat, bat, sat, fat';
 // 在字符串中找到at,并将at替换为ond,只替换一次
 var result = text.replace('at', 'ond');
// "cond, bat, sat, fat"
 console.log(result);


第二种情况:第一个参数为RegExp正则对象,第二个参数为字符串。

观察上述示例可知,若不使用全局标志,replace()仅替换第一次出现的匹配项。若要替换所有匹配内容,必须使用带有全局标志(/g)的正则表达式对象。


var text = 'cat, bat, sat, fat';
 // 使用/at/g 在全局中匹配at,并用ond进行替换
 var result = text.replace(/at/g, 'ond');
 // cond, bond, sond, fond
 console.log(result);

正则捕获组与替换字符串引用

第三种情况:考虑正则表达式中捕获组的影响。

RegExp拥有9个用于存储捕获组的属性。$1, $2...$9,分别用于存储第一到第九个匹配的捕获组。我们可以访问这些属性,以获取存储的值。


var text = 'cat, bat, sat, fat';
 // 使用/(.at)/g 括号为捕获组,此时只有一个,因此所匹配的值存放在$1中
 var result = text.replace(/(.at)/g, '$($1)');
 // $(cat), $(bat), $(sat), $(fat)
 console.log(result);


回调函数模式:无捕获组与有捕获组

第四种情况:第二个参数为回调函数,且正则表达式中不包含捕获组。


var text = 'cat, bat, sat, fat';
 // 使用/at/g 匹配字符串中所有的at,并将其替换为ond,
 // 函数的参数分别为:当前匹配的字符,当前匹配字符的位置,原始字符串
 var result = text.replace(/at/g, function(match, pos, originalText) {
  console.log(match + ' ' + pos);
  return 'ond'
 });
 console.log(result);
 // 输出
 /*
  at 1 dd.html:12:9
  at 6 dd.html:12:9
  at 11 dd.html:12:9
  at 16 dd.html:12:9
  cond, bond, sond, fond dd.html:16:5
 */

第五种情况:第二个参数为回调函数,且正则表达式中包含捕获组。


var text = 'cat, bat, sat, fat';
 // 使用/(.at)/g 匹配字符串中所有的at,并将其替换为ond,
 // 当正则表达式中存在捕获组时,函数的参数一次为:模式匹配项,第一个捕获组的匹配项,
 // 第二个捕获组的匹配项...匹配项在字符串中的位置,原始字符串
 var result = text.replace(/.(at)/g, function() {
  console.log(arguments[0] + ' ' + arguments[1] + ' ' + arguments[2]);
  return 'ond'
 });
 console.log(result);
 // 输出
 /*
  cat at 1 
  bat at 6 
  sat at 11 
  fat at 16 
  cond, bond, sond, fond 
 */

实战:使用replace实现字符串trim

上述内容涵盖了replace()方法的所有主要用法。最后,我们将结合replace方法与正则表达式,共同实现一个字符串trim(去除首尾空白)的功能。


(function(myFrame) {
  myFrame.trim = function(str) {
   // ' hello world '
   return str.replace(/(^\s*)|(\s*$)/g, '');
  };
  window.myFrame = myFrame;
 })(window.myFrame || {});
 // 测试
 var str = ' hello world '
 console.log(str.length); // 15
 console.log(myFrame.trim(str).length); // 11

本文总结了replace()方法的核心用法,希望能为读者的JavaScript学习提供有益参考。

作者最新文章