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

问题描述

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

如果他们的电子邮件地址是 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

我做错了什么?

解决方法

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

[^\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))
)

,

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

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...