regex JavaScript、正则表达式:如何在mailto中获取邮件地址:链接

vnzz0bqm  于 2022-11-18  发布在  Java
关注(0)|答案(4)|浏览(112)

是否有一个jquery插件或可能是一个正则表达式,可以用于mailto的查询字符串中的所有字段:链接。它应该支持mailto syntax
比如说如果我有一个链接...

<a href="mailto:astark1@unl.edu,id@internet.node">Some msg</a>

正则表达式应该会给予我mailto中的邮件地址:link -astark1@unl.eduid@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和函数,并获得电子邮件地址和查询字符串中传递的其他字段的关联数组。

2izufjch

2izufjch1#

解析URL,尤其是它们的查询字符串,不是正则表达式的工作。你可以使用a proper URL-parsing library,或者仅仅使用query string parsing one

ss2ws0br

ss2ws0br2#

我不知道这有多准确,但如果你觉得有必要使用正则表达式,它可能会得到改进。

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;
}

我不知道你在最后一部分是什么意思,所以我试着回答第一部分。

yws3nbqq

yws3nbqq3#

如果您知道自己在做什么:

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/

jckbn6z7

jckbn6z74#

这对我有用。

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;
}

相关问题