Javascript 将每个捕获的字符替换为*?

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]

我有电子邮件,想替换第一个字母和@to*之间的每个字符。例如:

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
。你之前的其他人的回答也很好,让我摆脱了精神僵局,并教会了我很多:)很高兴能帮忙,谢谢你的简化提示;)