快速提问 - 为什么这不起作用?
我很确定我测试过的一切都无济于事。我试图基本上添加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);
});
答案 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);
参考: