如何解决如何使用此模式创建正则表达式?
有人知道我如何制作这种模式的正则表达式吗?
对于我的问题,输入示例为 ggggggg@aaaaa.com.br
,预期输出为 gg***gg@aa***.com.br
。
如您所见,@ 之前的字母只会被替换为 ,如果字符串超过 4 个字符,遵循模式 gg**gg@
,并且 @ 之后的两个字母后跟 * 直到电子邮件的结尾提供者。
另一个例子是当有 3 个或更少的字母时:
从ggg@aaaaa.com
到g*g@aa***.com
我已经尝试过这样做,但它仍然不起作用:
regex = /(^.{2})(.*)(.{2})@(.{2})(?:(?=\.)(.*)|(\w+)(.*))/gm;
感谢您的帮助!
解决方法
当你在正则表达式中放入括号时(例如:s/\(.\)\1/\1/g
你可以稍后使用 \1 到 \9 来匹配重复模式。这是我想出的正则表达式(大部分)适合标准:
s/\(.\)\1..\1\1@\(.\)\2.*\.com\.br/\1\1**\1\1@\2\2***.com.br/g
。
我无法让它在末尾自动输入确切的星数,以便字符数仍与原始电子邮件保持一致,但希望它仍然有帮助。
使用 JavaScript,您可以使用捕获组,并根据组 1 和组 2 中的字符数组成返回字符串。
([^\s@]+)@([^\s@.]+)(\.[^\s@]+)
模式匹配
-
([^\s@]+)
捕获组 1,匹配除@
或空白字符以外的任何字符 1 次以上 -
@
匹配@
-
([^\s@.]+)
捕获组 2,匹配除.
@
或空白字符外的任何字符 1 次以上 -
(\.[^\s@]+)
捕获组 3,匹配一个点和电子邮件地址的其余部分
const regex = /([^\s@]+)@([^\s@.]+)(\.[^\s@]+)/;
const strings = [
"ggggggg@aaaaa.com.br","abcdefghijklmnop@aaaaa.com.br","abc@aaaaa.com","gg@aaaaa.com","g@aaaaa.com","@aaaaa.com",];
strings.forEach(s => {
let res = s.replace(regex,(_,g1,g2,g3) => {
let first = g1;
if (g1.length === 3) {
first = `*${g1.charAt(1)}*`
}
if (g1.length > 3) {
first = `**${g1.slice(2,-2)}**`
}
return `${first}@${'*'.repeat(g2.length)}${g3}`
});
console.log(res);
})
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。