[JavaScript] 1 line solution and explanation.
\nconst numUniqueEmails = emails => new Set(emails.map(mail => `${mail.split(\'@\')[0].replace(/\\+.*$|\\./g, \'\')}@${mail.split(\'@\')[1]}`)).size\n\n\n Skill
```\nconst numUniqueEmails = emails => new Set(emails.map(mail => `${mail.split(\'@\')[0].replace(/\\+.*$|\\./g, \'\')}@${mail.split(\'@\')[1]}`)).size\n```\n\n* Skills:\n\t1. ES6(arrow function, template literals)\n\t2. Set\n\t3. \tString(split, replace)\n\t4. \tRegular Expression\n* Explanation:\n\tIn this piece of code, I took lots of times to recall **regex**, and it is the most unreadable part, so let me explain: \n\t```\n\t\t/\\+.*$|\\./g\n\t```\n\t1. `+` is a specail char, so adds `\\`.\n\t2. `.*` means any character after `+`.\n\t3. `$`, in regex, it represents the end of string.\n\t4. `|` equals to `or`.\n\t5. `.` is also a special char, so adds `\\`.\n\t6. In the end of regex, `g`, global search, means finding all matches in input and replace them.\n\t7. In sum, replace the substring that after sign `+` or the char `.` with empty string.\n\nI\'m a Taiwanese, this is my first try to share my solution and explanation, please feel free to leave comments if you have any better approach or idea :).
[]