题目:‘1 2 3’.replace(/\d/g, parseInt)
输出:1 NaN 3
分析:
replace全解析:String.prototype.replace()
replace语法:
str.replace(regexp|substr, newSubStr|function)
当第二个参数是function
时候,回调函数会有多个参数。下面是该函数的参数:
变量名 | 代表的值 |
---|---|
match | 匹配的子串 |
p1,p2, … | 假如 replace() 方法的第一个参数是一个RegExp 对象,则代表第 n 个括号匹配的字符串。例如,如果是用 /(\a+)(\b+)/ 这个来匹配,p1 就是匹配的 \a+,p2 就是匹配的 \b+。 |
offset | 匹配到的子字符串在原字符串中的偏移量。(比如,如果原字符串是 ‘abcd’,匹配到的子字符串是 ‘bc’,那么这个参数将会是 1) |
string | 被匹配的原字符串。 |
NamedCaptureGroup | 命名捕获组匹配的对象 |
如果正则没有括号,或者没有括号匹配到的字符串,就没有p1,p2…,第二个参数就是偏移量offset;
parseInt语法:
parseInt(string, radix); // 其中radix从 2 到 36,代表进制
所以,题目等同于如下
'1 2 3'.replace(/\d/g, (match, offset)=>parseInt(match, offset))
// 测试下match和offset结果:
'1 2 3',replace(/\d/g, (match, offset) => {
console.log(match, offset)
// 1 0
// 2 2
// 3 4
})
输出:
parseInt(1,0) // 1
parseInt(2,2) // NaN
parseInt(3,4) // 3