Como pegar uma String que está entre tags com Javascript utilizando Regex – javascript regex
Pergunta:
Eu tenho a seguinte string:
var text = "Meu nome <[email protected]>";
Gostaria de pegar apenas o [email protected], utilizando Regex.
Autor da pergunta fernandoocf
Lucas Costa
Usando a API de regex do Javascript:
var text = "Meu nome <[email protected]>";
var regex = /(<)(.*)(>)/;
console.log(regex.exec(text)[2]);
Explicando
-
//delimita a área para executar uma regex -
(<)procura por uma string que começa com < -
(.*)Qualquer caracter dentro de < -
(>)final do recorte que termine com >
Essa regex irá retornar um resultado de três grupos, por isso o regex.exec(text)[2], que irá pegar somente o e-mail.
Você pode fazer assim:
var text = "Meu nome <[email protected]>";
var email = text.replace(/.*<(.*)>.*/, '$1');
console.log(email);
Note que o $1 representa o (.*), entre o < e o >, que no caso é o email.
Você pode achar mais informações sobre regex aqui.
O ideal para estes casos é pensar no máximo da informações possíveis que gerem um padrão de captura.
Exemplo
Você disse que quer o que esta entre do < e >
- Você considera que é um email? sim? então poderia definir que deve ter um
@e quais caracteres especiais serão validos, ex.:_-. - Se não é um e-mail, você considera que pode capturar o próprio
>? (seu caractere final). ex.:<var1 > var2>
Resolução
Como eu não sei exatamente o que é a sua captura vou considerar as que citei acima.
- Email :
/<([a-z][email protected][a-z]+(.[a-z]{2,3}){1,2})>/i. REGEX101 ** - Delimitado ai
>(char final) :/<([^>]+)>/. REGEX101 - Pode ter
>no meio :/<(.*)>/. REGEX101
Todos os resultado que deseja se encontram no grupo 1.
Nota
** : lembrando que você pode adicionar caracteres especiais nas partes de […]. ex.: [a-z_-.]
Adendo
Caso você queira capturar vários de uma vez, basta por a flag g no final das regex.
Utilização
var text ="Meu nome <[email protected]>";
var r = /<([^>]+)>/
console.log(r.exec(text)[1])
Sei que a pergunta já está respondida, mas e se eu quisesse pegar mais de um e-mail?
Essas expressões regulares só estão funcionando pra um e-mail.
Fiz a função abaixo, que embora não utilize expressões regulares, possui a funcionalidade de localizar e guardar o conteúdo entre < e > de uma ou mais ocorrências.
<script>
var texto = "Meus emails são <[email protected]>,<[email protected]> e <[email protected]>";
// Função que localiza conteúdo(emails) entre < e > e guarda em array
function localizar_tags(texto)
{
var emails = new Array();
i = 0;
while(texto.search("<") != -1)
{
pos_inicio = texto.search("<");
pos_fim = texto.search(">");
email = texto.substring(pos_inicio+1, pos_fim);
emails[i]=email;
texto = texto.substring(pos_fim+1,texto.length);
i++;
}
return emails;
}
// Para testar a função
window.onload=function()
{
emails = localizar_tags(texto);
for(i=0;i<emails.length;i++)
{
console.log(emails[i]);
}
}
</script>



