当字符串replace方法的第二个参数是一个函数时

84 阅读2分钟

众所周知,String.prototype.replace()方法用于替换字符串,它里面有两个参数
第一个参数:支持一个字符串或是一个正则表达式
1.如果是字符串,表示要替换的目标,
2.如果是正则表达式,表示替换要符合规则的目标
第二个参数:支持一个字符串或是一个函数
1.如果是字符串,表示要将目标替换成这个字符串
2.如果是一个函数,则需要在函数中返回要替换的内容
这时,可能有小伙伴要问了,replace中第二个参数为什么是一个函数呢? 因为我们在匹配中忽略了大小写 如果在项目中,接受后端传输的数据,直接使用target进行替换 会造成 大小写和后端不一致 所以需要使用方法中的match参数进行替换 比如这里我们要做一个字符串高亮的方法 常规写法:

image.png 返回情况:

image.png

第二个参数写成函数:

image.png

返回情况:

image.png

我们不难发现,当使用函数作为第二个参数时,源数据里的字母大小写也不会被改变
当然,该方法函数接收多个形参,我们只是使用了第一个,希望本文,对您有所帮助
其他参数如下:

变量名代表的值
match匹配的子串。(对应于上述的$&。)
p1,p2, ...假如 replace() 方法的第一个参数是一个RegExp 对象,则代表第 n 个括号匹配的字符串。(对应于上述的11,2 等。)例如,如果是用 /(\a+)(\b+)/ 这个来匹配,p1 就是匹配的 \a+p2 就是匹配的 \b+
offset匹配到的子字符串在原字符串中的偏移量。(比如,如果原字符串是 'abcd',匹配到的子字符串是 'bc',那么这个参数将会是 1)
string被匹配的原字符串。
NamedCaptureGroup命名捕获组匹配的对象