浅谈JavaScript中的replace函数

218 阅读3分钟

replace函数

1. 定义与用法

方法的签名为:replace(RegExp|string , string|function)

replace() 方法在字符串中搜索值或正则表达式。

replace() 方法返回已替换值的新字符串。

replace() 方法不会更改原始字符串。

2. replace()函数的使用

2.1 replace(string,string)

此方法的用处为替换唯一标识符(因此用的较少)

我们可以用下面的代码来说明:

let str='123str';
str=str.replace('str','456');
console.log(str);

此时的输出结果为:123456 <但是使用这种方法有着一定的局限性 如:

let str='123strstr';
str=str.replace('str','456');
console.log(str);

此时的输出结果为: 123456str 可以看出如果字符串中有多个待替换的元素,replace函数只能替换一次,如果想多次替换,只能重复调用了

2.2 replace(regexp,string)

此方法为全局替换,也就意味着可以重复替换元素了

如:

let str='123strstr';
str=str.replace(/str/g,'456');
console.log(str);

此时的输出结果为:123456456

可以看到原字符串中的str都被替换成了456

这里需要说明的是,str.replace(/背景/g,“北京”)的第一个参数 ”/背景/g“ 是一个正则表达式,使用/ /的正则写法是JavaScript中正则表达式的字面量写法。 在此处,正则表达式的末尾有个g,它表示match源字符串str中所有匹配项。 这里如果没有g,那么也只能匹配到第一个错别字”背景“,只有加了这个g,才能匹配到所有的”背景“。

2.3 replace(regexp,function(){})

以上方法都是较为简单的用法,如果需要进行额外的逻辑处理,则需要进行较为复杂的高级用法,就是 正则表达式+function 的用法。

如:

let str1='123str,str789';

let str2=str1.replace(/str/,function(){
     console.log(arguments);
     return '456';
});

console.log(str2);

此时的输出结果为:
[Arguments] { '0': 'str', '1': 3, '2': '123str,str789' } 123456,str789

  • arguments[0]是匹配到的子字符串
  • arguments[1]是匹配到的子串的索引位置
  • arguments[2]是源字符串本身

由上面方法2可知此时并没有在正则表达式后加g,所以没有全局替换

2.4 复杂用法,使用正则表达式进行分组

如:

let str1='张三:3百。 李四:400。 王五:500。 赵六:6百。'
let str2=str1.replace(/(\d+)(百)/g,function(){
     console.log(arguments);
     return arguments[1]+'00';
});
console.log(str2);

此时的输出结果为:
[Arguments] { '0': '3百', '1': '3', '2': '百', '3': 3, '4': '张三:3百。 李四:400。 王五:500。 赵六:6百。' }

[Arguments] { '0': '6百', '1': '6', '2': '百', '3': 26, '4': '张三:3百, 李四:400, 王五:500, 赵六:6百。' }

张三:300, 李四:400, 王五:500, 赵六:600。

由此可以看出: replace()函数第一个参数是分组正则表达式,第二个参数是函数时:

  • arguments[0]是匹配到的子字符串
  • arguments[1]是匹配到的第1个分组项
  • arguments[2]是匹配到的第2个分组项
  • arguments[3]是匹配到的字符串的索引位置
  • arguments[4]是源字符串本身