You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
varstr="Welcome to visit apple website!";console.log(str.replace("apple","checkson"));// Welcome to visit checkson website!console.log(str);// Welcome to visit apple website!
可见,String.prototype.replace 方法并不改变字符串本身,具有无害性。
实例2 (正则匹配模式)
varstr="Welcome to visit apple website!";console.log(str.replace(/apple/,"checkson"));// Welcome to visit checkson website!console.log(str);// Welcome to visit apple website!
实例3 (正则匹配全局替换)
varstr="Welcome to visit apple website! Do you like apple?";console.log(str.replace("apple","checkson"));// Welcome to visit checkson website! Do you like apple?console.log(str.replace(/apple/g,"checkson"));// Welcome to visit checkson website! Do you like checkson?
varstr="Welcome to visit Apple website!";console.log(str.replace(/apple/i,"checkson"));// Welcome to visit checkson website!console.log(str);// Welcome to visit Apple website!
实例5(第二个参数 replacement 中包含$符号用法)
// $1、$2 、..."good & handsome".replace(/(\w+)\s*&\s*(\w+)/g,"$2 & $1");//handsome & good// $&"bye".replace(/\w+/g,"$& $&");//bye bye// $`"javascript".replace(/script/,"$& is not $`");//javascript is not java// $'"javascript".replace(/java/,"$&$' is ");// javascript is script
"xxx replace is ok!".replace(/xxx/,"$1");// xxx replace is ok!"xxx replace is ok!".replace(/xxx/,()=>"$1");// $1 replace is ok!
实例6(replacement函数用法)
var_str='Just 11 do 22 it';varstr=_str.replace(/(\d)(\d)/g,function(arg1,arg2,arg3,arg4,arg5){console.log(arg1);console.log(arg2);console.log(arg3);console.log(arg4);console.log(arg5);});
前言
曾经的我天真地认为,
String.prototype.replace
其实没什么好学的,就是一个简单的、通用的字符串替换方法。可是,直到后来我遇到了一个业务问题,调试了足足将近一个小时左右,才把bug锁定在自己当初坚信基本不会用错的replace
方法上。今天,我不得不花业余的时间,好好聊聊replace
方法以及常见的坑。定义
replace() 方法用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串。
语法
返回值
一个新的字符串,是用 replacement 替换了 regexp/substr 的第一次匹配或所有匹配之后得到的。
说明
String.prototype.replace
该方法并不会改变字符串本身,只会返回替换后一个全新的字符串。注意: ECMAScript v3 规定,replace() 方法的参数 replacement 可以是函数而不是字符串。在这种情况下,每个匹配都调用该函数,它返回的字符串将作为替换文本使用。该函数的第一个参数是匹配模式的字符串。接下来的参数是与模式中的子表达式匹配的字符串,可以有 0 个或多个这样的参数。接下来的参数是一个整数,声明了匹配在 stringObject 中出现的位置。最后一个参数是 stringObject 本身。
实例
实例1(字符串模式)
我们要将 str 字符串中的 “apple” 替换成 “checkson”
可见,
String.prototype.replace
方法并不改变字符串本身,具有无害性。实例2 (正则匹配模式)
实例3 (正则匹配全局替换)
String
原型链上没有 replaceAll 方法,需要我们自己来封装一个类似的方法实例4(对大小写不敏感的模式)
实例5(第二个参数 replacement 中包含$符号用法)
那么,问题来了,我们替换的字符串中本来就包含
$$
,$1
,$'
,$&
等字符,那不是炸了?别急,因为 replacement 可以是一个函数,我们可以这样解决:实例6(replacement函数用法)
输出结果
拓展应用
下面介绍一个日常开发中非常实用的 replace 方法应用,来自bootstrap-table中的一个实用方法。
测试
这种写法就类似C语言中的
printf
语句,非常优雅。参考链接
The text was updated successfully, but these errors were encountered: