问题描述
我正在尝试检索我的站点用户的域,以便为他们分配基于特定组织的权限。
如果他们的电子邮件地址是 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 中遇到错误:
我做错了什么?
解决方法
您可以使用捕获组来匹配部件,而不是使用替换。
[^\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))
)
一些不像正则表达式那么花哨的东西怎么样:
function retrieveTeamFromEmail(userEmail) {
const at = userEmail.indexOf('@');
const dot = userEmail.lastIndexOf('.');
return userEmail.substring(at,dot);
}