JavaScript,regex:如何获取mailto:links中的邮件地址
是否有jquery插件或正则表达式,可用于mailto:链接的查询字符串中的所有字段。它应该支持这一进程 说如果我有一个像JavaScript,regex:如何获取mailto:links中的邮件地址,javascript,regex,mailto,Javascript,Regex,Mailto,是否有jquery插件或正则表达式,可用于mailto:链接的查询字符串中的所有字段。它应该支持这一进程 说如果我有一个像 <a href="mailto:astark1@unl.edu,id@internet.node">Some msg</a> 对于像这样的链接 <a href="mailto:value">tell a friend</a> 我将传递value和函数,并获得电子邮件地址的关联数组和在查询字符串中传递的其他字段。解析UR
<a href="mailto:astark1@unl.edu,id@internet.node">Some msg</a>
对于像这样的链接
<a href="mailto:value">tell a friend</a>
我将传递
value
和函数,并获得电子邮件地址的关联数组和在查询字符串中传递的其他字段。解析URL,尤其是它们的查询字符串,不是正则表达式的工作。您可以使用或可能只是一个.p>解析URL,尤其是它们的查询字符串,这不是正则表达式的工作。您可以使用或可能只是一个。我不确定这有多准确,但如果您觉得有必要使用正则表达式,它可能会得到改进
function getEmails(str) {
// returns a list of email addresses in 'str'
var tags = str.match(/<a href=('|")mailto:(.*?)\1(.*?)>/gi);
var res = [];
if (!tags.length) return res;
for (var i = 0; i < tags.length; i++) {
tags[i] = tags[i].replace(/^<a href=('|")mailto:(.+?)(\?[^\1]*)?\1>$/,'$2');
var arr = tags[i].replace(/\s/g,'').split(',');
for (var j = 0; j < arr.length; j++) res.push(arr[j]);
}
return res;
}
函数getEmails(str){
//返回“str”中的电子邮件地址列表
var tags=str.match(/我不确定这有多准确,但如果您觉得有必要使用regex,它可能会得到改进
function getEmails(str) {
// returns a list of email addresses in 'str'
var tags = str.match(/<a href=('|")mailto:(.*?)\1(.*?)>/gi);
var res = [];
if (!tags.length) return res;
for (var i = 0; i < tags.length; i++) {
tags[i] = tags[i].replace(/^<a href=('|")mailto:(.+?)(\?[^\1]*)?\1>$/,'$2');
var arr = tags[i].replace(/\s/g,'').split(',');
for (var j = 0; j < arr.length; j++) res.push(arr[j]);
}
return res;
}
函数getEmails(str){
//返回“str”中的电子邮件地址列表
var tags=str.match(/如果您知道自己在做什么:
var href = 'mailto:hello@world.com?subject=My+Subject&body=My+Body';
function getMailto(s) {
var r = {};
var email = s.match(/mailto:([^\?]*)/);
email = email[1] ? email[1] : false;
var subject = s.match(/subject=([^&]+)/);
subject = subject ? subject[1].replace(/\+/g,' ') : false;
var body = s.match(/body=([^&]+)/);
body = body ? body[1].replace(/\+/g,' ') : false;
if(email) {r['email'] = email;}
if(subject) {r['subject'] = subject;}
if(body) {r['body'] = body;}
return r;
}
console.log(getMailto(href));
演示:如果您知道自己在做什么:
var href = 'mailto:hello@world.com?subject=My+Subject&body=My+Body';
function getMailto(s) {
var r = {};
var email = s.match(/mailto:([^\?]*)/);
email = email[1] ? email[1] : false;
var subject = s.match(/subject=([^&]+)/);
subject = subject ? subject[1].replace(/\+/g,' ') : false;
var body = s.match(/body=([^&]+)/);
body = body ? body[1].replace(/\+/g,' ') : false;
if(email) {r['email'] = email;}
if(subject) {r['subject'] = subject;}
if(body) {r['body'] = body;}
return r;
}
console.log(getMailto(href));
演示:真的吗?数百行代码用于提取电子邮件地址?是的。任何人如果不这样说,都不理解URL的全部复杂性。真的吗?数百行代码用于提取电子邮件地址?是的。任何人如果不这样说,都不理解URL的全部复杂性。+1用于添加解决方案,而不是虽然console.log中的方法名称不一致,需要进行字符串化,但表示您不应该这样做!。-1这种解析在一般情况下是完全不够的。例如,如果主题包含感叹号,它将被编码为%21
,您的代码将保持原样。@Anko这只是“使用风险自负!"+1用于添加解决方案,而不是说您不应该这样做!尽管console.log中的方法名称不一致,需要进行字符串化。-1此解析在一般情况下完全不足以进行。例如,如果主题包含感叹号,它将被编码为%21
,而您的代码将保留该名称照原样。@Anko这只是“你自己冒险使用!”我不知道这是否满足OP的需要,但这正是我想要的。谢谢!(也谢谢你没有发布“不要这样做”的答案:)我不知道这是否满足OP的需要,但这正是我想要的。谢谢!(也谢谢你没有发布“不要这样做”的答案:)