【发布时间】:2020-12-25 21:18:18
【问题描述】:
我正在使用 Google Apps 脚本查找订单确认电子邮件(例如来自 Amazon 和 Target)并提取订单的总价。
来自目标的电子邮件包含多个美元值(单个项目、税金和总计)。我想我可以通过查找“total”这个词来确定总价,然后得到下一个 $ 值。
这是电子邮件正文的摘录。
<table cellspacing=3D"0" cellpadding=3D"0" border=3D"0=
">
<tbody>
<tr>
<td>
<span style=3D"font-family:Arial, Hel=
vetica, sans-serif;font-size:18px;color:#231f20;font-weight:bold;">total:</=
span>
</td> =
=20
</tr>
</tbody>
</table>
</td>
<td align=3D"right">
<table cellspacing=3D"0" cellpadding=3D"0" border=3D"0=
">
<tbody>
<tr>
<td>
<span style=3D"font-family:Arial, Hel=
vetica, sans-serif;font-size:18px;font-weight:bold;color:#231f20">$26.49</s=
pan>
</td> =
=20
</tr>
</tbody>
</table>
=20
</td>
</tr>
<tr>
这是我构建和测试的正则表达式
/total:(?:.*\n)*.*\$\d+\.\d{2}/
它适用于文本网站,例如https://regexr.com/。
但是,在我的脚本中它不起作用。使用调试器,我可以看到我的变量永远不会被匹配填充。但是,如果我将正则表达式简化为
,它确实有效/total:/
这是我的代码:
function testGmail() {
var threads = GmailApp.getInboxThreads();
var messages = GmailApp.getMessagesForThreads(threads)
for (var i = 0 ; i < threads.length; i++) {
var from = messages[i][0].getFrom()
switch(from) {
case "\"Amazon.com\" <no-reply@amazon.com>":
Logger.log("From is Amazon")
break
case "\"Target.com\" <orders@service.target.com>":
Logger.log("From is Target")
var body = messages[i][0].getRawContent()
var amount = parseMessageData(body)
Logger.log(amount)
break
default:
Logger.log("From is " + from)
}
}
}
function parseMessageData(body) {
// Look for the price
var regExAmount = /total:/
var amountmatch = body.match(regExAmount)
var amount = amountmatch[0].replace(/[^\d.]/g, '') // only keeps digits and periods (.) (to remove $ sign and any commas)
return amount
}
【问题讨论】:
标签: javascript html regex google-apps-script