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
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))
)
我正在尝试检索我的站点用户的域,以便为他们分配特定的基于组织的权限。
如果他们的电子邮件地址是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
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))
)