Reputation: 3423
I know my questions are similar to other questions but I could not figure it.
I am practicing javascript. I have arrays of emails. from that email I want to get three out puts of strings fullname, firstname and lastname inside one map function. I can able to get output first name by reading one stack-overflow questions. I am able get full name by I get output john.doe
, I want johndoe
. Could not figure it out last name doe
.
My example email address is like this: [email protected]
My expected output is
firstname: 'john'
fullname: johndoe
lastname: doe
This is my code
const Names = (emails) => {
emails.map(i => {
console.log("firstname", i.substring(0, i.indexOf(".")));
console.log("fullname", i.substring(0, i.lastIndexOf("@")));
console.log("lastname");
})
};
Names(emails)
const emails = [
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
]
const Names = (emails) => {
emails.map(i => {
console.log("firstname", i.substring(0, i.indexOf(".")));
console.log("fullname", i.substring(0, i.lastIndexOf("@")));
console.log("lastname");
})
};
Names(emails)
Upvotes: 0
Views: 1034
Reputation: 163277
If the email addressed can contain other characters than only word characters, and you want to check if there are characters after the @
as well for the full format, you might also use a pattern like:
^([^\s@.]+)\.([^\s@.]+)@[^\s@]+$
Then pattern matches:
^
Start of string([^\s@.]+)
Capture group 1, Match any char other than a whitespace char, @
or .
\.
Match a dot([^\s@.]+)
Capture group 2, Match any char other than a whitespace char, @
or .
@[^\s@]+
Match the @
followed by 1 or more chars other than @
$
End of stringIn the code, check if there is a match and use the 2 capture groups. If there is not match, leave the string as is to not get undefined or unexpected behaviour.
const emails = ["[email protected]", "[email protected]"]
let regex = /^([^\s@.]+)\.([^\s@.]+)@[^\s@]+$/
let result = emails.map(s => {
let m = s.match(regex);
if (m) {
return {
"fullname": m[1] + m[2],
"firstname": m[1],
"lastname": m[2]
}
}
return s;
})
console.log(result)
Upvotes: 1
Reputation: 4217
const emails=["[email protected]","[email protected]","[email protected]","[email protected]","[email protected]","[email protected]","[email protected]","[email protected]"]
let re = /^(?<first>\w+)\.(?<second>\w+)@/
let result = emails.map(e => {
let {first,second} = e.match(re).groups
return {fulll:first+second,first,second}
})
console.log(result)
Upvotes: 1
Reputation: 22524
You can use array#map
with string#split
to get names.
const emails = [ "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]","[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]"],
users = emails.map(mail => {
const [fullName] = mail.split('@');
const [firstName, lastName] = fullName.split('.');
return { fullName: `${firstName}${lastName}`, firstName, lastName };
});
console.log(users);
.as-console-wrapper { max-height: 100% !important; top: 0; }
Upvotes: 1
Reputation: 151
use replace to remove '.'.
lastname can be get in substring between '.' and '@'
const emails = [
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
]
const Names = (emails) => {
emails.map(i => {
console.log("firstname:", i.substring(0, i.indexOf(".")),
", fullname:", i.substring(0, i.lastIndexOf("@")).replace(".", ""),
", lastname:", i.substring(i.indexOf(".")+1, i.lastIndexOf("@")));
})
};
Names(emails)
Upvotes: 1
Reputation: 4592
you can try this
const Names = (emails) => {
emails.forEach(i => {
const indexDot = i.indexOf(".");
const indexAt = i.lastIndexOf("@");
console.log("firstname", i.substring(0, indexDot));
console.log("fullname", i.substring(0, indexAt));
console.log("lastname", i.substring(indexDot+1, indexAt));
})
};
Upvotes: 1
Reputation: 92
For fullname, you cane use replace(".", "")
to remove the '.'
So for fullname it can be:
i.substring(0, i.lastIndexOf("@")).replace(".", "")
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace
Upvotes: 1