Регулярное выражение для игнорирования первого и последнего символа - PullRequest
1 голос
/ 30 мая 2019

Попытка скрыть сообщение в следующем формате:

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

То есть мне нужно регулярное выражение, чтобы сопоставить все, кроме первого и последнего символа, а также @.Я могу использовать [^@] для всего, но как игнорировать последние и первые символы в строке?Якоря кажутся подходящими, но каков точный синтаксис?

Ответы [ 3 ]

4 голосов
/ 30 мая 2019

Как насчет использования lookahead :

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

См. Эту демонстрацию на regex101

Я также добавил пробел к символам, которые не будут заменены.

1 голос
/ 30 мая 2019

Если инструмент или язык, который вы используете, поддерживает обходные пути, вы можете использовать:

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

Демо: https://regex101.com/r/5Tbaq7/1

0 голосов
/ 30 мая 2019

Язык не помечен, но если вы используете язык программирования и хотите убедиться, что в адресе электронной почты есть знак @ и отображаются первый и последний символы, вы можете использовать группы захвата и использоватьзамените в группах, которые вы хотите показать, на *:

^(\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);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...