[英]Javascript replace email addresses
快速问题 - 为什么这不起作用?
我很确定我已经测试了一切都无济于事。 我试图基本上将 mailto 链接添加到可以找到的任何电子邮件。
它不会用 mailto a 标签替换电子邮件链接。
谢谢,哈利
$(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);
});
我想你应该改为:
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.
});
第一个问题是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);
参考:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.