JavaScript,正则表达式:如何在mailto:links中获取邮件地址
JavaScript, regex: How to fetch mail address in mailto: links
是否有jquery插件,或者可能是regex,可以用于mailto:link的查询字符串中的所有字段。它应该支持mailto语法。
如果我有一个链接,比如。。。
<a href="mailto:astark1@unl.edu,id@internet.node">Some msg</a>
正则表达式应该在mailto:link-astark1@unl.edu
,id@internet.node
中给出邮件地址。它还应该支持像这样的链接
<a href="mailto:astark1@unl.edu?subject=Comments from MailTo Syntax Page">
<a href="mailto:astark1@unl.edu?body=I am having trouble finding information on">
<a href="mailto:astark1@unl.edu?subject=MailTo Comments&cc=ASTARK1@UNL.EDU&bcc=id@internet.node">
对于像这样的链接
<a href="mailto:value">tell a friend</a>
我将传递value
和函数,并获得查询字符串中传递的电子邮件地址和其他字段的关联数组。
解析URL,尤其是它们的查询字符串,不是正则表达式的工作。您可以使用一个合适的URL解析库,或者只是一个查询字符串解析库。
我不确定这有多准确,但如果您觉得有必要使用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;
}
顺便说一句,我不知道你在最后一部分是什么意思,所以我试着回答第一部分。
如果您知道自己在做什么:
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));
演示:https://jsfiddle.net/l2aelba/qov9wpk5/
这对我有用。
function parseMailTo(mailto) {
var url = new URL(mailto)
var query = parseQuery(url.search)
return {
to: {url.pathname}
subject: {query.subject}
}
}
function parseQuery(queryString) {
var query = {};
var pairs = (queryString[0] === '?' ? queryString.substr(1) : queryString).split('&');
for (var i = 0; i < pairs.length; i++) {
var pair = pairs[i].split('=');
query[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1] || '');
}
return query;
}
相关文章:
- 使用 jQuery 的 .on 函数如何获取事件的原始元素
- jquery试图按名称获取按钮位置
- 如何在jQuery中获取元素的形式
- 如何在php文件中获取$.post-ajax传递的值
- 在Shopify中获取博客文章的图片
- 使用Javascript获取所选选项ID
- 在jQuery中获取表的行索引
- 使用jquery将mysql数据获取到新的表行中
- 在动态创建的元素上获取对特定选择器的引用
- 从城市名称获取惊喜
- Angular只从数组中获取所需的数据
- 无法将数据从firebase获取到我的html页面
- 从ajax请求中获取javascript对象
- 如何从画布上的某个移动事件中获取X和Y
- 是否有一个JS/jQuery函数可以获取某个类的每个元素的ID
- 如何在PHP中使用$_POST获取Select元素值
- 获取@ResponseBody的一部分作为主干和Spring MVC控制器之间的参数
- 从Rally获取一个特定的标记,以便计算另一个字段中的值
- Twitter Bootstrap typeahead:使用“this”获取上下文/调用元素
- JavaScript,正则表达式:如何在mailto:links中获取邮件地址