我希望能够提取嵌入标签中的电子邮件地址,例如B
,其中src为<email> test@demo.com </email>
我使用的表情如下:<email>test@demo.com</email>
。
这很好。但是,如果电子邮件是超链接,即(?<=email>).*(?=<)/i)
,那么我将无法再提取确切的电子邮件地址。我得到以下内容:
<email>**<a href="mailto:test@demo.com" target="_blank"**>test@demo.com</a> </email>
,而不是<a href="mailto:test@demo.com">test@demo.com</a>
。我已经尝试过test@demo.com
,但未返回任何内容。
关于超链接存在时如何提取电子邮件的任何想法?
答案 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。