Javascript替换电子邮件地址

时间:2014-04-22 16:07:37

标签: javascript jquery replace

快速提问 - 为什么这不起作用?

我很确定我测试过的一切都无济于事。我试图基本上添加mailto链接到任何可以找到的电子邮件。

它没有用邮件替换电子邮件链接到标签。

谢谢, 哈利

$(document).ready(function() {
    var email_regex = /([a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\.[a-zA-Z0-9._-]+)/gi;

    var bodyText = $('body').html();
    var match = email_regex.exec(bodyText);
    // To do - Don't try it when there is already a mailto link, can probably just add mailto to the regex.
    for (var i = 0; i < match.length; i++) {
        bodyText.replace(match[i], '<a href="mailto:' + match[i] + '">' + match[i] + '</a>');
        console.log(match[i]);
    }
    $('body').html(bodyText);
    console.dir(match);
});

2 个答案:

答案 0 :(得分:7)

我想你应该这样做:

 var result = bodyText.replace(email_regex,'<a href="mailto:$1">$1</a>');
 console.log(result); // This two lines are enough.

完整代码:

$(document).ready(function() {
    var email_regex = /([a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\.[a-zA-Z0-9._-]+)/gi;
    var bodyText = $('body').html();
    var result = bodyText.replace(email_regex,'<a href="mailto:$1">$1</a>');
    console.log(result); // This two lines are enough.
});

答案 1 :(得分:1)

第一个问题是g标志不会立即检索所有匹配项。它只允许在循环中调用exec()。你需要:

var match;
while ( (match = email_regex.exec(bodyText)) !==null) {
}

第二个问题是replace()不会修改原始字符串。你需要:

bodyText= bodyText.replace(match[i], '<a href="mailto:' + match[i] + '">' + match[i] + '</a>');

不过,你可以通过这种方式轻松进入无限循环。您需要处理副本:

var newBodyText = bodyText;
...
while ( (match = email_regex.exec(bodyText)) !==null) {
    ...
    newBodyText = newBodyText.replace(...)
}
$('body').html(newBodyText);

参考: