WIX Velo - 从用户电子邮件中提取域 - 正则表达式问题

WIX Velo - Extracting Domain from User Email - Regex Issue

我正在尝试检索我的站点用户的域,以便为他们分配特定的基于组织的权限。

如果他们的电子邮件地址是email@example.com,我想提取示例。如果是email@ex.ample.com我要提取ex.ample

我的正则表达式是 (?<=@)[^.].[^.](?=.)

但我正在努力将其集成到代码中。我的代码如下:

$w.onReady(async function () {
 let userEmail = await memberData.loginEmail;
    retrieveTeamFromEmail(userEmail);
    $w('#userAccountSetupIntroText').text = ("Let's set up your account. We have your company as " +
        userEmail + ".\n\nTell us a little more about yourself.");
})

function retrieveTeamFromEmail(userEmail) {
 return userEmail
        .replace(?<=@)[^.]*.[^.]*(?=\.);
}

我在 .replace 处遇到错误:

.replace error

我做错了什么?

不如正则表达式那么花哨的东西怎么样:

function retrieveTeamFromEmail(userEmail) {
    const at = userEmail.indexOf('@');
    const dot = userEmail.lastIndexOf('.');
    return userEmail.substring(at, dot);
}

您可以使用捕获组来匹配零件,而不是使用替换。

[^\s@]@([^\s@]+)\.[a-z]{2,}

模式匹配:

  • [^\s@]@ 匹配除空白字符或@
  • 之外的任何字符
  • ( 捕获组 1
    • [^\s@]+ 匹配任何字符 1 次以上,空白字符或 @
    • 除外
  • ) 关闭组 1
  • \.[a-z]{2,} 匹配一个点(注意转义点)和 2 个或更多字符 a-z

Regex demo

const pattern = /[^\s@]@([^\s@]+)\.[a-z]{2,}/;

function retrieveTeamFromEmail(s) {
  const m = s.match(/[^\s@]@([^\s@]+)\.[a-z]{2,}/, s);
  return m ? m[1] : s;
}
[
  "email@example.com",
  "email@ex.ample.com",
  "test"
].forEach(s =>
  console.log(retrieveTeamFromEmail(s))
)