Javascript 将HREF替换为what';s位于标记之间(带有电子邮件表达式)

Javascript 将HREF替换为what';s位于标记之间(带有电子邮件表达式),javascript,jquery,html,regex,hyperlink,Javascript,Jquery,Html,Regex,Hyperlink,在前面的一个问题中,我了解到您可以抓住链接标签之间的内容并将其放在HREF中: $('a').attr('href', function () { return 'http://' + $(this).text()}) 但是,我需要更多的帮助:我需要识别标签之间的文本何时是电子邮件,以将其转换为mailto:href 我对reg表达式没有太多经验,所以任何建议和指导都会很棒 谢谢 首先,您需要使用正则表达式检查电子邮件。然后将电子邮件传递给该功能进行测试。如果结果为true,则在href开头添

在前面的一个问题中,我了解到您可以抓住链接标签之间的内容并将其放在HREF中:

$('a').attr('href', function () {
return 'http://' + $(this).text()})
但是,我需要更多的帮助:我需要识别标签之间的文本何时是电子邮件,以将其转换为mailto:href

我对reg表达式没有太多经验,所以任何建议和指导都会很棒


谢谢

首先,您需要使用正则表达式检查电子邮件。然后将电子邮件传递给该功能进行测试。如果结果为true,则在href开头添加“mailto:”,如果结果为false,则在开头添加“http://”

 if(checkEmail($('a').text()))
     $('a').attr('href', "mailto:"+$('a').text())
 else
    $('a').attr('href', "http://"+$('a').text());



function checkEmail(email) {
  var re = /^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
  return re.test(email);
}
if(检查电子邮件($('a').text())
$('a').attr('href',“mailto:”+$('a').text())
其他的
$('a').attr('href',“http:/”+$('a').text());
功能检查电子邮件(电子邮件){
变量re=/^([^()[\]\\,;:\s@“]+(\.[^()[\]\,;:\s@“]+)*)(“+”)(\[[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[1,3}.]124;([a-zA Z-0-9]++]2,$);
返回重新测试(电子邮件);
}

您是否尝试过搜索电子邮件正则表达式?有很多。如果前面没有http://或mailto://就很难了,因为url可以(但很少)包含“@”字符。您可以检查它是否以
mailto
开头:。。。99%的时候你是对的,1%可能是无效语法。一定要先修剪一下。看一看,给我的场景提供更多的背景:我们有一个招聘网站,雇主没有正确地使用WYSIWYG编辑器进行链接,因此,我们最终收到了很多没有mailto的电子邮件,还有很多指向他们自己网站的链接都指向了#你的正则表达式不匹配
me@localhost
这是一个非常有效的地址。我认为正则表达式应该遵循官方的RFC 5322,因为有些国家使用UTF-8电子邮件地址。例如:伊昭傑@郵件.商務 或者我认为
me@localhost
是一种非常特殊的情况,仅用于测试,没有其他电子邮件采用这种格式。也
伊昭傑@郵件.商務不是有效的国际电子邮件地址。我认为上面提到的正则表达式可以覆盖所有有效的电子邮件地址。好吧,在我们的使用场景中,我们不需要担心所有可能的场景,例如非常特殊的用例或其他国家(它只是一个北美平台)