I am trying to retrieve the domain of my site users in order to assign them specific organisation based privileges.
If their email address is email@example.com, I want to extract example. If it’s email@ex.ample.com I want to extract ex.ample
The regex I have is (?<=@)[^.].[^.](?=.)
But I’m struggling to integrate this into the code. My code as follows:
$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 + ".nnTell us a little more about yourself.");
})
function retrieveTeamFromEmail(userEmail) {
return userEmail
.replace(?<=@)[^.]*.[^.]*(?=.);
}
I’m getting an error at .replace:
What am I doing wrong?
Advertisement
Answer
Instead of using replace, you can match the part using a capture group.
[^s@]@([^s@]+).[a-z]{2,}
The pattern matches:
[^s@]@Match any char except a whitspace char or @(Capture group 1[^s@]+Match 1+ times any char except a whitspace char or @
)Close group 1.[a-z]{2,}Match a dot (note to escape the dot) and 2 or more chars 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))
)