Como extrair um e-mail de uma String

Para extrair e-mails de uma string com JavaScript, ou qualquer outra linguagem, pode ser uma tarefa bem extensa devido a diversas conferencias que precisariam ser feitas para saber se aquele trecho é um e-mail

Por exemplo, você poderia ter algo do tipo:

let text = '@rediffmail.com blablabla farkal@gmail.com teste@@@ rodnsdfald ferdfnson <rfernsdfson@gmal.com> Affdmdol Gondfgale gyfanamosl@gmail.comtruform techno pidfpinfg@truformdftechnoproducts.com "NiTsdfeSh ThIdfsKaRe"';

let listaPalavras = text.split(" ");

let listaEmails = [];

listaPalavras.forEach((palavra) =>{
    if(palavra.includes("@")){
        listaEmails.push(palavra);
    }
});

console.log(listaEmails);

Poderíamos ter uma lista de e-mails filtrada com base no @. Mas dai você pode se perguntar se “@Joao” entre outras possíveis variações tanto devido ao conteúdo do texto quanto a possíveis erros de digitação. Com isso podemos acabar tendo um código como o abaixo:

let text = '@rediffmail.com blablabla farkal@gmail.com teste@@@ rodnsdfald ferdfnson <rfernsdfson@gmal.com> Affdmdol Gondfgale gyfanamosl@gmail.comtruform techno pidfpinfg@truformdftechnoproducts.com "NiTsdfeSh ThIdfsKaRe"';

let listaPalavras = text.split(" ");

let listaEmails = [];

listaPalavras.forEach((palavra) =>{
    if(palavra.includes("@") 
        && palavra[0] != "@" 
        && palavra.includes(".co")
        && palavra.includes(palavra.substr(0, palavra.indexOf("@"))) != "!"){
        listaEmails.push(palavra);
    }
});

console.log(listaEmails);

E isso é só o começo, estre IF teria que ser muito maior.

Mas existe uma solução usando REGEX (conheça o Regex aqui) que faz diversas conferencias ao mesmo tempo e permite a extração em poucas linhas. Veja o exemplo:

let text = '@rediffmail.com blablabla farkal@gmail.com teste@@@ rodnsdfald ferdfnson <rfernsdfson@gmal.com> Affdmdol Gondfgale gyfanamosl@gmail.comtruform techno pidfpinfg@truformdftechnoproducts.com "NiTsdfeSh ThIdfsKaRe"';

let listaEmails = text.match(/([a-zA-Z0-9.-]+@[a-zA-Z0-9.-]+\.[a-zA-Z0-9._-]+)/gi);

console.log(listaEmails);

Espero que este snippet ajude mais alguém como me ajudou. Deixe sua duvida ou comentário na sessão abaixo caso você tenha notado algo que possa melhorar ou caso esses snippet ajudou você