"1 2 3".replace(/\d/g, parseInt); //1 NaN 3
请教一下各位大佬这个结果是怎么得到的?
/**
* parseInt(string, radix) 实际上这个函数接收两个参数
* 而replace的回调也有多个项
* 第一个值为匹配到的完整结果,后面的以此为每一个分组
* 也许见过 xxx.replace(/(a)(b)(c)/g, '$1-$2-$3') 这样的写法
* ---------------------------------
* 而你这个情况实际上翻译出来是下面这样
*/
"1 2 3 4 5 6".replace(/\d/g, (g, $1) => {
console.log('g', g, $1)
return parseInt(g, $1)
})
// 如果要达到你目前想要的结果,可以这样写
"1 2 3 4 5 6".replace(/\d/g, g => parseInt(g))
8 回答4.8k 阅读✓ 已解决
6 回答3.5k 阅读✓ 已解决
5 回答2.9k 阅读✓ 已解决
5 回答6.4k 阅读✓ 已解决
4 回答2.3k 阅读✓ 已解决
4 回答2.8k 阅读✓ 已解决
3 回答2.5k 阅读✓ 已解决
调用替换函数的参数是:
匹配的串,captures, 位置, 原始串, named captures
这里没有 capture ,所以参数是 匹配串,位置,原始串。(参见 21.2.5.9RegExp.prototype [ @@replace ] ( string, replaceValue ))
parseInt 有两个参数,string, radix 。
radix 为 0 时会被替换为 10;否则,如果 radix 小于 2 或 大于36 ,返回 Nan 。
这里对 parseInt 的三次调用分别是 (第三个参数都被 parseInt 忽略):
parseInt("1", 0, "1 2 3") 十进制解析 “1”,结果 1
parseInt("2", 2, "1 2 3") 二进制解析 “2”,失败 NaN
parseInt("3", 4, "1 2 3") 四进制解析 “3”,结果 3