Regex 用于忽略第一个和最后一个字符的正则表达式

Regex 用于忽略第一个和最后一个字符的正则表达式,regex,Regex,试图将电子邮件混淆为以下格式: a***@******m 这意味着我需要一个正则表达式来匹配除第一个和最后一个字符外的所有字符,以及@。 我可以使用[^@]来处理任何事情,但是如何忽略字符串中的最后和第一个字符呢?锚点似乎是一种方式,但确切的语法是什么?使用: 我还为不会被替换的字符添加了空格。如果您使用的工具或语言支持lookarounds,您可以使用: (?<!^)[^@](?!$) (? 演示:没有标记语言,但如果您使用的是编程语言,并且希望确保电子邮件地址中有@符号,并且显示

试图将电子邮件混淆为以下格式:

a***@******m
这意味着我需要一个正则表达式来匹配除第一个和最后一个字符外的所有字符,以及@。 我可以使用
[^@]
来处理任何事情,但是如何忽略字符串中的最后和第一个字符呢?锚点似乎是一种方式,但确切的语法是什么?

使用:


我还为不会被替换的字符添加了空格。

如果您使用的工具或语言支持lookarounds,您可以使用:

(?<!^)[^@](?!$)
(?

演示:

没有标记语言,但如果您使用的是编程语言,并且希望确保电子邮件地址中有@符号,并且显示了第一个和最后一个字符,则可以使用捕获组,并对要显示的组使用替换(
*
):

^(\S)([^@\n]*)(@)([^@\n]*)(\S)$
  • ^
    字符串的开头
  • (\S)
    捕获组1,匹配非空白字符
  • ([^@\s]*)
    捕获组2,匹配0+次而不是@或空格字符
  • (@)
    捕获组3,匹配
    @
  • ([^@\s]*)
    捕获组4,匹配0+次而不是@或空格字符
  • (\S)
    捕获组5,匹配非空白字符
  • $
    字符串结尾

例如,使用javascript

let pattern=/^(\S)([^@\S]*)(@)([^@\S]*)(\S)$/;
[
"test@test.com",
“特st@te圣公会“,
"test@test@test.com“,
"te@nl",
"t@t",
“测试”,
“@tes”,
“测试”
].forEach(str=>{
let replaced=str.replace(模式、功能){
返回g1+g2。替换(//g,“*”)+g3+g4。替换(//g,“*”)+g5;
});
控制台日志(已替换);

});
您可以用负前瞻取代负前瞻,以便使用JS引擎(而不是ECMA2018)的工具能够使用它。
^(\S)([^@\n]*)(@)([^@\n]*)(\S)$