2016-08-08 3 views
1

Я использую скрипт Google Apps для извлечения содержимого писем из gmail, после чего мне нужно извлечь все ссылки из тегов html. Я нашел код здесь, в stackoverflow, и я реализовал его с регулярным выражением, но проблема в том, что он всегда возвращает мне первый URL-адрес. (http://vacante2016.eu/tr/17599/51743713/c4f5eadf38eb475d39e3cdeca9201538)Получить все ссылки с html-страницы с помощью regex

Есть ли способ сделать цикл, который ищет следующий контент, соответствующий выражению регулярного выражения, для отображения всех элементов по одному?

Здесь вы можете увидеть пример с содержанием электронной почты, что мне нужно, чтобы получить эти ссылки из: https://www.mailinator.com/inbox2.jsp?public_to=get_urls#/#public_showmaildiv

Это мой код:

function getURL() { 

    var threads = GmailApp.getInboxThreads(); 
    var message = threads[0].getMessages()[0]; 
    var content = message.getRawContent(); 

    var source = (content || '').toString(); 
    var urlArray = []; 
    var url; 
    var matchArray; 

    // Regular expression to find FTP, HTTP(S) URLs. 
    var regexToken = /(http|https|ftp|ftps)\:\/\/[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(\/\S*)?/; 

    // Iterate through any URLs in the text. 
    while((matchArray = regexToken.exec(source)) !== null) 
    { 
     var token = matchArray[0]; 
     urlArray.push(token); 
    } 
} 

UPDATE: Изменено регулярное выражение /(?:ht|f)tps?\:\/\/[a-zA-Z0-9\-.]+\.[a-zA-Z]{2,3}(\/[\S=]*)?/g улучшилось, но теперь я также получаю следующий тип ответа при поиске URL-адресов: "http://vacante2016.eu/clk/17599/5=\r\n1743713/150132/bf7639dd7e7aa48c9197a52a8c61e168\"><img" ... Я думаю, что регулярное выражение должно также иметь условие для возврата url, но только до символа >.

Также есть способ удалить дополнительные символы, такие как =, \r и \n из найденного URL-адреса?

+1

Похоже, вы забыли '/ g':' var regexToken = /(http|https|ftp|ftps)\:\/\/[a-zA-Z0-9\-\.]+\.[a -zA-Z] {2,3} (\/\ S *)/г;? '. См. Http://stackoverflow.com/questions/520611/how-can-i-match-multiple-occurrences-with-a-regex-in-javascript-similar-to-phps –

+0

Если письмо отформатировано с помощью html, есть причина, почему вы не просто получаете атрибуты прямо из тегов? – NTL

+0

@NTL нет, нет причин, но я не знаю, как это сделать ... Я думаю, что регулярное выражение должно искать свойство 'href' из' ' и '' tags – Valip

ответ

1

Чтобы получить несколько совпадений с RegExp#exec, вам необходимо использовать глобальный модификатор /g.

Кроме того, так как ваш вход HTML-код, вы должны убедиться, что вы не захватить < с \S:

/(?:ht|f)tps?:\/\/[-a-zA-Z0-9.]+\.[a-zA-Z]{2,3}(\/[^"<]*)?/g 

См regex demo.

Если по какой-то причине этот шаблон не соответствует знак равенства, добавьте его в качестве альтернативы:

/(?:ht|f)tps?:\/\/[-a-zA-Z0-9.]+\.[a-zA-Z]{2,3}(?:\/(?:[^"<=]|=)*)?/g 

См another demo (однако, первый нужно делать).

+0

Второй образец работает отлично! Последний вопрос ... есть способ удалить дополнительные символы, такие как '=', '\ r' и' \ n' из найденного URL-адреса, чтобы '' http://vacante2016.eu/clk/17599/5= \ r \ n1743713/150132/bf7639dd7e7aa48c9197a52a8c61e168 \ "' будет '" http: //vacante2016.eu/clk/17599/51743713/150132/bf7639dd7e7aa48c9197a52a8c61e168 \ "'? – Valip

+0

Я не знаю, являются ли они буквальными строками. Если да, вам придется использовать sth, например '.replace (/ \\ [rn] | =/g, '')'. –

+0

Они являются литералами, я использую 'token.replace (/ \\ [rn] | =/g, '')' и ничего не происходит. Уверен, что я также сделал toke.toString() перед заменой. – Valip

-1

Я предполагаю, что на основе кода, который вы указали, вы можете получить содержимое электронной почты в виде строки html.

function getHref(content){ 
    var el = document.createElement('html'); 
    el.innerHTML = content; 

    var hrefs = []; 

    var elements = el.getElementsByTagName('a'); 

    for (var i=0; i < elements.length; i++){ 
    hrefs.push(elements[i].href); 
    } 

    return hrefs; 
} 

Это вернет массив всех атрибутов href из тегов привязки на странице.

+3

Объект 'document' недоступен в сценариях Google Apps. Эта структура не поддерживает все функции JS, только некоторые из них рубчик. –

Смежные вопросы