正则表达式提取电子邮件地址

时间:2018-11-09 12:04:48

标签: javascript

我希望能够提取嵌入标签中的电子邮件地址,例如B,其中src为<email> test@demo.com </email>

我使用的表情如下:&lt;email&gt;test@demo.com&lt;/email&gt;。 这很好。但是,如果电子邮件是超链接,即(?<=email&gt;).*(?=&lt;)/i),那么我将无法再提取确切的电子邮件地址。我得到以下内容: &lt;email&gt;**<a href="mailto:test@demo.com" target="_blank"**>test@demo.com</a> &lt;/email&gt;,而不是<a href="mailto:test@demo.com">test@demo.com</a>。我已经尝试过test@demo.com,但未返回任何内容。 关于超链接存在时如何提取电子邮件的任何想法?

2 个答案:

答案 0 :(得分:1)

Web开发人员101:不要使用正则表达式解析HTML,而应使用DOM操作。

下面这将记录所有电子邮件,无论它们是在普通的email标签或a inside email标签中还是在任何标签嵌套中。

console.log(
  Array.from(document.getElementsByTagName('email'))
  .map(elt => elt.textContent)
  .map(email => email.trim())
)
<email>john@doe.com</email>
<email><a href="mailto:john@doe.com">john@doe.com</a></email>
<email><b><a href="mailto:john@doe.com">john@doe.com</a></b></email>
<email><span><b><a href="mailto:john@doe.com">john@doe.com</a></b></span></email>
<email>"o'brian"@irish.com</email>

.trim()很有用,以防HTML中出现空白,这些空白可以显示在电子邮件周围。

答案 1 :(得分:0)

您可以解析Dom的每一行,并将电子邮件正则表达式与标签内容进行匹配,例如以下代码段:

<script>
function getEmailsFromText (text)
{
    return text.match(/([a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\.[a-zA-Z0-9._-]+)/gi);
}
var items = document.getElementsByTagName("*");
    for (var i = 0; i < items.length; i++) {
        var text = items.item(i).textContent;
        var emailIds = getEmailsFromText(text);
        if(emailIds){
        console.log("Emails ID's : "+emailIds);
        }
    }
</script>

要进行测试,请打开您的javascript控制台标签,并将上面的代码粘贴到script标签内,您可以查看当前html页面的所有电子邮件ID。