字符串中的replace⽅法
place()
该⽅法作为字符串中⾮常常⽤的⽅法, 今天我们具体介绍⼀下它的⽤法
语法格式
第⼀个⼊参可以是正则或者是字符串, 如是字符串将不能设置忽略⼤⼩写, 在匹配到结果后返回, ⽽不继续匹配下去, 若是正则表达式则会按正则的意图进⾏匹配;
第⼆个⼊参是字符串或者是回调函数, 若是字符串则会替换匹配到的字符串, 如果是函数则在每次匹配到结果时执⾏该函数并把函数的返回值替换匹配到的字符串;
字符串是基本类型值不⽤担⼼会破坏原来的值, 这个⽅法会返回⼀个新的字符串, 所以⽀持链式调⽤;
第⼆个参数是字符串时
该字符串中可以插⼊以下特殊变量:
变量名解释
$$代表插⼊⼀个 $
$&插⼊匹配的⼦串, ⽤来引⽤匹配到⼦串
$`插⼊当前匹配到的⼦串左边的内容
$'插⼊当前匹配到的⼦串的右边的内容
$n如果第⼀个参数是正则, 并且 n 是个⼩于 100 的正整数, 那么插⼊第 n 个括号匹配的字符串
⼀些 Demo 如下:
let str = 'hello world';
第⼆个参数是函数时
在这种情况下,当匹配执⾏后,该函数就会执⾏。函数的返回值作为替换字符串。 (注意: 上⾯提到的特殊替换参数在这⾥不能被使⽤。) 另外要注意的是,如果第⼀个参数是正则表达式,并且其为全局匹配模式,那么这个⽅法将被多次调⽤,每次匹配都会被调⽤。该函数的⼊参解释:
函数⼊参位置对应解释
match匹配到的字符串
p1, p2, p3, ...同上 $1, $2, $3
offset匹配到的字符串在原字符串中的偏移量
string原字符串
该函数的精确参数取决于第⼀个参数是不是正则表达式, 以及该正则⾥指定了多少个括号⼦串
// 如果我们要把字符串中的单词⾸字母⼤写, 可以进⾏如下操作
let str = 'hello world',
reg = /(\w)(\w*)/g;
console.log(match, p1, offset, str);
UpperCase() + p2;
});
对于上⾯的函数中的⼊参⼤家可以打印⼀下看看, 并加以理解;
place()这个⽅法在字符串操作中使⽤⾮常频繁, 同时也由于其相对复杂的⼊参组合导致该⽅法⾮常灵活, 我们看⼀看在我们项⽬中使⽤它的场景; 掩码⼿机号相信⼤家都做过, 我们看看使⽤replace如何实现:
// 假设我们有⼀个⼿机号
let tel = '131********',
res = '',
tmp = '****';
// ⽅法1:
res = place(/\d{4}(?=\d{4}$)/g, tmp); // 第⼀个参数是正则
// ⽅法2:
res = place(/(\d{3})(\d{4})/g, '$1' + tmp); // 第⼀个参数是正则
// ⽅法3:
res = place(tel.slice(3, -4), tmp); // 第⼀个参数是字符串
// ⽅法4:
res = place(/(\d{3})(\d{4})(\d{4})/g, function (match, p1, p2, p3) {
字符串截取方法slice
return p1 + tmp + p3;
});
相信应该还有别的可以使⽤replace()实现的途径, ⼤家可以好好考虑⼀下;
⼩结
place()⽅法使⽤⽐较灵活, ⼤家可以在项⽬中通过多使⽤来加深对它的理解和记忆, ⼀般对于简单匹配, 第⼆个参数可以使⽤简单字符串来操作, 如果要对替换控制的⽐较精细的话, 需要有⼀个⽐较清晰的正则做为第⼀个⼊参, 此时第⼆个⼊参可以使⽤回调函数进⾏精确控制。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。