独书先生 Menu

编写一个函数,将除最后四个字符之外的所有字符都改为’#’

codewars在线编程练习总结:信用卡数组隐藏

问题:编写一个函数maskify,它将除最后四个字符之外的所有字符都改为’#’。

列子:

maskify("4556364607935616") == "############5616"
maskify( "64607935616") == "#######5616"
maskify( "1") == "1"
maskify( "") == ""
maskify("Skippy") == "##ippy"
maskify("Nananananananananananananananana Batman!") == "####################################man!"


解决方案一:slice+正则匹配

function maskify(cc) {
return cc.slice(0, -4).replace(/./g, '#') + cc.slice(-4);
}

解决方案二:正则前瞻

function maskify(cc) {
return cc.replace(/.(?=....)/g, '#');
}

补充知识:正则前瞻:

前瞻:
exp1(?=exp2) 查找exp2前面的exp1
后顾:
(?<=exp2)exp1 查找exp2后面的exp1
负前瞻:
exp1(?!exp2) 查找后面不是exp2的exp1
负后顾:
(?<!exp2)exp1 查找前面不是exp2的exp1

举例:

"中国人".replace(/(?<=中国)人/, "rr") // 匹配中国人中的人,将其替换为rr,结果为 中国rr
"法国人".replace(/(?<=中国)人/, "rr") // 结果为 法国人,因为人前面不是中国,所以无法匹配到

from csdn blog

衍生话题:ES6 repeat 自实现

function str_repeat(str, num){
return new Array( num + 1 ).join( str );
}
str_repeat("#",5);//##### 这是把字符串str重复num次的函数实现