我正在使用Google Apps Script从Gmail中获取电子邮件的内容,然后我需要从HTML标签中提取所有链接。我在stackoverflow上找到了一些代码,并使用正则表达式实现了它,但问题是它总是返回给我第一个URL。(
有没有办法制作一个循环来搜索下一个与正则表达式匹配的内容,以逐个显示所有元素?
这里您可以看到一个示例,其中包含我需要从中获取这些链接的电子邮件的内容:https://www.mailinator.com/inbox2.jsp?public_to=get_urls#/#public_showmaildiv 这是我的代码:
更新: 将正则表达式更改为
http://vacante2016.eu/tr/17599/51743713/c4f5eadf38eb475d39e3cdeca9201538
)有没有办法制作一个循环来搜索下一个与正则表达式匹配的内容,以逐个显示所有元素?
这里您可以看到一个示例,其中包含我需要从中获取这些链接的电子邮件的内容: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 );
}
}
更新: 将正则表达式更改为
/(?: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
,但仅限于>
符号。
此外,是否有一种方法可以从找到的URL中删除额外的字符,例如=
,\r
和\n
?
/g
:var regexToken = /(http|https|ftp|ftps)\:\/\/[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(\/\S*)?/g;
。请参阅 https://dev59.com/onRB5IYBdhLWcg3wxZ1K。 - Wiktor Stribiżewhttp://vacante2016.eu/tr/17599/51743713/c4f5eadf38eb475d39e3cde=ca9201538
将在等号后被截断,如下所示:http://vacante2016.eu/tr/17599/51743713/c4f5eadf38eb475d39e3cde
...为什么会发生这种情况? - Valiphref=3D"http://vacante2016.eu/tr/17599/51743713/c4f5eadf38eb475d39e3cde=ca9201538
,上面的正则表达式将url截断为http://vacante2016.eu/tr/17599/51743713/c4f5eadf38eb475d39e3cde
。 - Valip