Krisna
Krisna

Reputation: 3423

Javascript arrays email substring into full name, firstname and lastname

      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

Answers (6)

The fourth bird
The fourth bird

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 string

Regex demo

In 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

Alan Omar
Alan Omar

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

Hassan Imam
Hassan Imam

Reputation: 22524

You can use array#map with string#split to get names.

Upvotes: 1

icejoywoo
icejoywoo

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

D. Seah
D. Seah

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

Tenso
Tenso

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

Related Questions