假设我有一个电子邮件地址,'abcdef@gmail.com'。我想替换'a'和'f'之间的所有字符,使结果看起来像'a****f@gmail.com'。
尝试使用正则表达式和替换来实现。
但是结果看起来像这样:
尝试使用正则表达式和替换来实现。
str.replace(/^(.*?)@/gi, '*');
但是结果看起来像这样:
*gmail.com
有没有方法可以满足我的需求?
str.replace(/^(.*?)@/gi, '*');
*gmail.com
有没有方法可以满足我的需求?
*
替换内部字母来显示电子邮件地址的长度。最好使用固定数量的*
。*
进行替换。str.replace(/^(.).*(.@)/, '$1***$2')
replace
方法,其中用户输入的中间部分也可以被替换为 *
:
var email = "abcdef@gmail.com";
document.write(email.replace(/^(.)(.*)(.@[^@]*)$/, function(m, g1, g2, g3) {
return g1 + g2.replace(/./g, "*") + g3;
}));
/^(.)(.*)(.@[^@]*)$/
正则表达式的工作方式:
^
- 匹配字符串开头(.)
- 第1组:任何第一个字符(.*)
- 第2组:任何字符,直到最后一个 @ 字符之前(.@[^@]*)
- 第3组:倒数第二个 @
前面的一个字符,然后是 @
,然后是除了 @
以外的任意 0+ 个字符,直到...$
- 字符串结尾.replace(/./g, "*")
只会将 Group 2 中的任何字符替换为 *
。/(?!^).(?=[^@]+@)/g
匹配除了第一个字符((?!^)
)外,后面跟着一个或多个非 @
字符和一个 @
的任何字符,但不包括换行符。
var re = /(?!^).(?=[^@]+@)/g;
document.body.innerHTML = "fake@gmail.com".replace(re, "*");
(?!^).(?=[^@]+@)
只使用了lookahead,并且可在JavaScript中运行。它匹配除换行符外的任何字符,但不包括第一个字符 ((?!^)
),并且在该字符后面有一个或多个@
。 - Wiktor Stribiżew