Regex将电子邮件地址从字符串包装为mailto

Regex to wrap email address in mailto from a string

本文关键字:包装 mailto 字符串 电子邮件地址 Regex      更新时间:2023-09-26

想把some text email@address.com变成some text <a href="mailto:email@address.com">email@address.com</a>

下面是我在替换使用的正则表达式:

'some text email@address.com'.replace(/([a-zA-Z0-9_'.'-]+)@(([[0-9]{1,3}' + ''.[0-9]{1,3}'.[0-9]{1,3}'.)|(([a-zA-Z0-9'-]+'.' + ')+))([a-zA-Z]{2,4}|[0-9]{1,3})(]?)/gi, '<a href='mailto:$1'>$1</a>');

正则表达式不能正常工作,请帮助

根据@Toto的建议,您可以使用此正则表达式'S+@'S+包括电子邮件中除空格外的所有可能(和不可能)字符。

('S+@'S+)

如果只包含英文字符a-z、数字0-9、点.、下划线_和破折号-。你可以这样做:

(['w'.'-]+@'w+'.'w+)

如果您想在前面的à è ì ò ù中添加任何可能的字符,同时排除特殊字符% ^ & *,则可以使用'pL,如下所示:

(['w'.'-'pL]+@'w+'.'w+)

最后一个正则表达式的演示:

    var Email = "some text email@address.com.";
    Email = Email.replace(/(['w'.'-'pL]+@'w+'.'w+)/g, '<a href=mailto:$1>$1</a>');
    document.write (Email);

可以使用replace()函数的replacer函数:

var str = "some text email@address.com";
var regex = /'w+@'w+'.'w+/gi;
var replacedString = str.replace( regex, function(match){
  return '<a href="'+match+'">'+match+'</a>';
});
console.log( replacedString );

老问题,但是我在代码中做了类似的事情,并且必须修复电子邮件地址已经包装在mailto链接中的错误。下面是我对这个问题的简单解决方案:

var rx = /([mailto:'w.'-pL]+@'w+.['w.'-pL]+)/gi
return str.replace(rx, function (match) {
  return (match.indexOf('mailto') === 0) ? match : `<a href="mailto:${match}">${match}</a>`
})

regex可选地匹配"mailto:", replacer函数检查它是否在匹配中,如果是,则返回未修改的。