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]是源字符串本身