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

时间:2019-05-29 23:15:58

标签: regex

尝试将电子邮件混淆为这种格式:

a***@******m

意思是我需要一个正则表达式来匹配除第一个和最后一个字符以及@以外的所有内容。 我可以为所有内容使用[^@],但如何忽略字符串中的最后一个和第一个字符?锚似乎是要走的路,但是确切的语法是什么?

5 个答案:

答案 0 :(得分:3)

如何使用lookahead

(?!^|.$)[^@\s]

See this demo at regex101

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

答案 1 :(得分:1)

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

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

演示:https://regex101.com/r/5Tbaq7/1

答案 2 :(得分:0)

/[^a-z0-9@]+/i

regex demo

如果您的模式是固定的,只需排除任何单词/数字/@。

答案 3 :(得分:0)

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

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

Regex demo

例如使用javascript

let pattern = /^(\S)([^@\s]*)(@)([^@\s]*)(\S)$/;
[
  "test@test.com",
  "te st@te st.com",
  "test@test@test.com",
  "te@nl",
  "t@t",
  "test@",
  "@tes",
  "test"
].forEach(str => {
  let replaced = str.replace(pattern, function(_, g1, g2, g3, g4, g5) {
    return g1 + g2.replace(/./g, "*") + g3 + g4.replace(/./g, "*") + g5;
  });
  console.log(replaced);
});

答案 4 :(得分:-2)

在这里,我们可以简单地在开头和结尾添加两个任意字符(.),然后从一个简单的表达式开始:

.(.+).

DEMO

然后,我们将(.+)替换为我们希望匹配和验证的任何内容。

例如,我们可以将其扩展为:

.([a-z0-9_]{5,32}@[a-z0-9_]{1,12}\.co).

DEMO

^.([a-z0-9_]{5,32}@[a-z0-9_]{1,12}\.co).$

RegEx电路

jex.im可视化正则表达式:

enter image description here