Расширенная замена строки в js: могу ли я сделать это по-другому? - PullRequest
0 голосов
/ 05 сентября 2018

Код для замены никнейма адреса электронной почты на звезды:

"example@gmail.com".replace(/(\S+?)(@\S+?)/, (match, firstGroup, secoundGroup) => {
   return firstGroup.replace(/\S/g, '*') + secoundGroup;
})

Результат: *******@gmail.com (количество звездочек такое же, как у example)

Могу ли я сделать это без callback-функции? Или, может быть, есть лучший способ сделать это?

(я упростил регулярное выражение для электронной почты)

Ответы [ 2 ]

0 голосов
/ 05 сентября 2018

Вы можете использовать

console.log("example@gmail.com".replace(/[^@\s](?=[^@\s]*@)/g, '*'));
console.log("example@gmail.com".replace(/[^@\s]/gy, '*'));

/[^@\s](?=[^@\s]*@)/g соответствует любому символу, кроме пробелов и @, за которым следует любое количество таких символов, затем @ и замена на * и /[^@\s]/gy соответствует любому символу, кроме @ и пробелу в начале строки, а последующие совпадения происходят только после окончания предыдущего успешного совпадения.

0 голосов
/ 05 сентября 2018

Если вы счастливы иметь фиксированное количество звездочек (что часто лучше, чтобы не указывать длину действительного значения), вы можете сделать это:

"example@gmail.com".replace(/^[^@]+/, "****")

Пример:

console.log(
    "example@gmail.com".replace(/^[^@]+/, "****")
);

В противном случае, если вы используете replace, вам потребуется обратный вызов, но он может быть проще, без использования групп захвата и с использованием String#repeat:

"example@gmail.com".replace(/^[^@]+/, m => "*".repeat(m.length))

Пример:

console.log(
    "example@gmail.com".replace(/^[^@]+/, m => "*".repeat(m.length))
);

В противном случае, Я думаю, вы используете split или аналогичный & mdash; Нет, Виктор на помощь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...