‘1 2 3‘.replace(/\d/g, parseInt)

题目:‘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

你可能感兴趣的:(面试,javascript,javascript,面试)