JavaScript, regex: Как получить почтовый адрес в mailto: ссылки - PullRequest
0 голосов
/ 05 марта 2012

Существует ли плагин jquery или может быть регулярное выражение, которое можно использовать для всех полей в строке запроса ссылки mailto :. Он должен поддерживать 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 и функцию и получил бы ассоциативный массив адресов электронной почты и другие поля, передаваемые в строке запроса.

Ответы [ 3 ]

2 голосов
/ 05 марта 2012

Парсинг URL-адресов, и особенно строк их запросов, не является заданием для регулярных выражений. Вы можете использовать правильную библиотеку парсинга URL или, возможно, просто строку запроса, разбирающую одну .

1 голос
/ 05 марта 2012

Я не уверен, насколько это точно, но это может быть улучшено, если вы чувствуете необходимость использовать регулярные выражения.

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

Я не уверен, что вы подразумеваете в последней части подКстати, я попытался ответить на первую часть.

0 голосов
/ 14 января 2016

Если вы знаете, что делаете:

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/

...