微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用此模式创建正则表达式?

如何解决如何使用此模式创建正则表达式?

有人知道我如何制作这种模式的正则表达式吗?

对于我的问题,输入示例为 ggggggg@aaaaa.com.br,预期输出gg***gg@aa***.com.br。 如您所见,@ 之前的字母只会被替换为 ,如果字符串超过 4 个字符,遵循模式 gg**gg@,并且 @ 之后的两个字母后跟 * 直到电子邮件的结尾提供者。

一个例子是当有 3 个或更少的字母时:

ggg@aaaaa.comg*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,匹配一个点和电子邮件地址的其余部分

Regex demo

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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?