【发布时间】:2016-12-14 06:26:36
【问题描述】:
我正在使用 Google Apps 脚本从 gmail 获取电子邮件的内容,然后我需要从 html 标记中提取所有链接。我在 stackoverflow 上找到了一些代码,并用正则表达式实现了它,但问题是它总是返回第一个 url。 (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;。见stackoverflow.com/questions/520611/… -
如果电子邮件是 html 格式的,是否有理由说明您为什么不直接从标签中获取属性?
-
@NTL 不,没有理由,但我不知道该怎么做...我认为正则表达式必须从
<a>和@987654337 中搜索href属性@标签 -
@WiktorStribiżew 修复了它,但现在看起来像这样的 url 响应:
http://vacante2016.eu/tr/17599/51743713/c4f5eadf38eb475d39e3cde=ca9201538将在=之后被截断,如下所示:http://vacante2016.eu/tr/17599/51743713/c4f5eadf38eb475d39e3cde.. 为什么会发生这种情况? -
好吧,
/(?:ht|f)tps?\:\/\/[a-zA-Z0-9\-.]+\.[a-zA-Z]{2,3}(\/\S*)?/gshould work。检查您对链接所做的操作或是否检查预期内容。
标签: javascript regex google-apps-script