Javascript 将每个捕获的字符替换为*?
我有电子邮件,想替换第一个字母和@to*之间的每个字符。例如:Javascript 将每个捕获的字符替换为*?,javascript,regex,Javascript,Regex,我有电子邮件,想替换第一个字母和@to*之间的每个字符。例如: john.smith@gmail.com -> j*********@gmail.com 这是我的代码,但它产生的是一颗星,而不是多颗星-我坚持这样做: 让h=“约翰。smith@gmail.com“。替换(/()(.*)@/,“$1*”) 控制台日志(h)您可以传入,例如: const result='john。smith@gmail.com’更换( /^(.)(.*)(@.+)$/, (匹配,…组)=>组[0]
john.smith@gmail.com -> j*********@gmail.com
这是我的代码,但它产生的是一颗星,而不是多颗星-我坚持这样做:
让h=“约翰。smith@gmail.com“。替换(/()(.*)@/,“$1*”)
控制台日志(h)代码>您可以传入,例如:
const result='john。smith@gmail.com’更换(
/^(.)(.*)(@.+)$/,
(匹配,…组)=>组[0]+'*'。重复(组[1]。长度)+组[2]
);
控制台日志(结果)代码>您可以使用replace
的回调参数:
让h=“约翰。smith@gmail.com“.replace(/()(.*)@/,(u,first,rest)=>
第一个+“*”。重复(rest.length)+“@”
);
控制台日志(h)代码>您的正则表达式将匹配整个部分,并用星形替换。相反,您希望正则表达式能够分别匹配每个要匹配的字符。这将有助于:
让h=“约翰。smith@gmail.com“.replace(/(?仅写:
设e=Array.from(“john。smith@gmail.comreduce((arr,char,index)=>arr.concat(arr.includes('@')| | char==='@'?char:index==0?char:'*'),[])。连接(''');
console.log(e)
简单的正则表达式替换即可:
让h=“约翰。smith@gmail.com“.替换(/(?!^)。(?=.*@)/g,”*)
console.log(h);
全局标志是您在正则表达式中缺少的内容
我有一个一次性的正则表达式来完成这个任务:
"john.smith@gmail.com".replace(/(?!^)(?=.+@)./g,'*')
- 负向前看以排除第一个字符
- 正向前瞻@char前面的所有字符
- 替换所有捕获的全局标志
让h=“约翰。smith@gmail.com“.替换(/(?!^)(?=。+@)。/g,”*);
console.log(h);
提示:在@
上拆分,然后用*
替换所有字符,但一侧的字符除外。您还可以使用一个函数,该函数可以对零件进行额外替换。如果使用固定数量的星号(*
),则电子邮件地址隐藏得更好与第一个字符一起。您的正则表达式/(?!^)[^@](?=[^@]*@)/g
也被删除nice@KamilKieCZWSKI作为用户名可能包含<代码> @ /代码>当前的一个是所有发布的解决方案中最好的。我不考虑带有两个@的情况,但我做了测试:<代码>约翰。s@mith@替换(/(?!^)(?=.+@)。/g,“*”)
(萨米尔回答)-我得到了正确的结果-所以我不明白重点-?萨米尔回答中的想法是最好的(他先展示出来)@KamilKiełczewski你没有使用萨米尔的解决方案。萨米尔解决方案直接:“约翰。s@mith@替换(/(?!^.)(?=。+@)。/g,“*”)
->“j*********@gmail.com”
(在chrome控制台中运行)-问题在哪里?谢谢,很好的回答:)你的regexp甚至可以简化为/(?!^)(?=.+@)。/g
。你之前的其他人的回答也很好,让我摆脱了精神僵局,并教会了我很多:)很高兴能帮忙,谢谢你的简化提示;)