取出字符串中的连续数字并把数字乘以10再返回新的字符串--js中replace的回调函数详解

以前面试遇到的一道题,意思就是:把取出字符串中的连续数字并把数字乘以10再返回新的字符串,当然截取字符串是可以做到的,但是方法太挫,明显得用正则,可是当时不会,后来又遇到这样的面试题目,还是不会,最近看vue的源码看到Line135,总算知道怎么办了。

经常用的replace原来替换值可以用回调函数,怪我以前太无知。。。
以前都只会类似这样的用法:

var tt = "hi#h$ello"
tt = tt.replace(/(#|\$)/g, '');
console.log(tt);//hihello
用回调函数可以这样:

var tem2 = 'a910-a2-a3'
tem2 = tem2.replace(/(\d)+/g, function (macth) {
    return macth*10;
})
console.log(tem2);//a9100-a20-a30
另外如果是要单个数字乘以10的话 , 用/(\d)/g就好啦,结果就是a90100-a20-a30。

这里的回调函数是每次执行到匹配的数字都会执行一次,比如说910、2、3,这里执行三次。


还可以这样用,得到的匹配不全部替换:

var camelizeRE = /-(\w)/g;
var camelize =function (str) {
    return str.replace(camelizeRE, function (_, c) { 
        console.log('camelize',_,c);//camelize -i i // camelize -e e
        return c ? c.toUpperCase() : ''; 
    })
};
var tem = 'this-is-el';
console.log(camelize(tem))//thisIsEl
这里打印回调函数,可以发现两个参数值的区别。

这段代码是来自vue源码的Line135,只是我把cached函数去掉了。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值