正则表达式将mailto中的电子邮件地址从字符串中包装起来

时间:2016-11-15 17:11:00

标签: javascript regex

想要将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>');

正则表达式无法正常工作,请帮忙。

3 个答案:

答案 0 :(得分:1)

您可以使用replace()功能的replacer function

&#13;
&#13;
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 );
&#13;
&#13;
&#13;

答案 1 :(得分:1)

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

(\S+@\S+)

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

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

如果您想要使用任何语言à è ì ò ù添加前一个可能的字符,同时排除特殊字符% ^ & *,您可以使用\pL,如下所示:

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

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

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

答案 2 :(得分:1)

老问题,但我在我的代码中做了类似的事情,并且必须修复一个错误,其中电子邮件地址已经包含在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>`
})

正则表达式可选地匹配&#34; mailto:&#34;并且replacer函数检查它是否在匹配中,如果是,则返回它未修改。

也许这会帮助谷歌过路人。