用星号替换地址电子邮件中缺刻部分的代码:
"example@gmail.com".replace(/(\S+?)(@\S+?)/, (match, firstGroup, secoundGroup) => {
return firstGroup.replace(/\S/g, '*') + secoundGroup;
})
结果:*******@gmail.com
(星数与example
相同)
我可以不使用回调函数吗?也许有更好的方法呢?
(我简化了电子邮件的正则表达式)
答案 0 :(得分:3)
您可以使用
console.log("example@gmail.com".replace(/[^@\s](?=[^@\s]*@)/g, '*'));
console.log("example@gmail.com".replace(/[^@\s]/gy, '*'));
/[^@\s](?=[^@\s]*@)/g
匹配除空格和@
之外的任何其他字符,后跟任意数量的此类字符,后跟@
,并用*
和{{3替换}}从字符串的开头匹配@
以外的任何char和空格,随后的匹配仅在上一次成功匹配结束之后发生。
答案 1 :(得分:0)
如果您很高兴拥有固定数量的星星(通常最好这样做,以避免遗漏实际值的长度),您可以执行以下操作:
"example@gmail.com".replace(/^[^@]+/, "****")
示例:
console.log(
"example@gmail.com".replace(/^[^@]+/, "****")
);
否则,如果您使用的是replace
,则需要一个回调,但是它可以更简单,不使用捕获组,而使用String#repeat
:
"example@gmail.com".replace(/^[^@]+/, m => "*".repeat(m.length))
示例:
console.log(
"example@gmail.com".replace(/^[^@]+/, m => "*".repeat(m.length))
);
否则,我认为您开始使用-不,Wiktor to the rescue。split
或类似的