如何将特定字段从 GMAIL 正文解析为 google SHEETS
How to parse specific field from GMAIL body to google SHEETS
我有一个以此开头的 gmail 正文:
Name: Full Report
Store: River North (Wells St)
Date Tripped: 18 Feb 2020 8:40 PM
Business Date: 18 Feb 2020 (Closed)
Message:
Information:
This alert was tripped based on a user defined trigger: Every 5 minutes.
我正在尝试解析 Date Tripped: 字段和 Business Date: 字段,但不相信我的正则表达式是正确的。
// Implement Parsing rules using regular expressions
if (content) {
tmp = content.match(/Date Tripped: \s*([A-Za-z0-9.\s ]+)(\r?\n)/);
var tripped = (tmp && tmp[1]) ? tmp[1].trim() : 'N/A';
tmp = content.match(/Business Date: \[0-9][()]/);
var businessdate = (tmp && tmp[1]) ? tmp[1].trim() : 'N/A';
对于 Date Tripped,需要进行细微更改:
Date Tripped:\s*([:A-Za-z0-9\s]+)\r?\n
您的主要错误:您忘记将 :
放在 class 括号内。
提示:去掉 (
和 )
周围的 \r?\n
。你不想抓住那些。
您可以将其缩短一点:
Date Tripped:\s*([:\w\s]+)\r?\n
对于营业日期,这一个可以:
Business Date:\s([\w\s]+\([a-zA-Z]+\))
或更短:
Business Date:\s([\w\s]+\(\w+\))
您的(主要)错误:您转义了 \[
,此处不正确。接下来:[()]
匹配 (
和 )
,但不匹配 (Closed)
。
参见 regex101
您还可以使模式更具体一些,并使用一个模式来匹配两个选项。
\b(?:Business Date|Date Tripped):\s*(?:3[01]|[12][0-9]|0?[1-9])\s+[A-Za-z]+\s+\d{4}\s+(?:\([^()]+\)|(?:1[0-2]|0?[1-9]):[0-5]?[0-9]\s*[AP]M)
说明
\b(?:Business Date|Date Tripped):\s*
匹配其中一个选项
(?:
非捕获组
3[01]|[12][0-9]|0?[1-9]
匹配数字1-31
)
关闭群组
\s+[A-Za-z]+\s+\d{4}\s+
匹配 1+ 个字符 A-Za-z 后跟 4 个数字
(?:
非捕获组
\([^()]+\)
从左括号匹配到右括号
|
或
(?:1[0-2]|0?[1-9]):[0-5]?[0-9]\s*[AP]M
匹配时间模式
)
关闭群组
请注意,该模式不会验证日期本身。
我有一个以此开头的 gmail 正文:
Name: Full Report
Store: River North (Wells St)
Date Tripped: 18 Feb 2020 8:40 PM
Business Date: 18 Feb 2020 (Closed)
Message:
Information:
This alert was tripped based on a user defined trigger: Every 5 minutes.
我正在尝试解析 Date Tripped: 字段和 Business Date: 字段,但不相信我的正则表达式是正确的。
// Implement Parsing rules using regular expressions
if (content) {
tmp = content.match(/Date Tripped: \s*([A-Za-z0-9.\s ]+)(\r?\n)/);
var tripped = (tmp && tmp[1]) ? tmp[1].trim() : 'N/A';
tmp = content.match(/Business Date: \[0-9][()]/);
var businessdate = (tmp && tmp[1]) ? tmp[1].trim() : 'N/A';
对于 Date Tripped,需要进行细微更改:
Date Tripped:\s*([:A-Za-z0-9\s]+)\r?\n
您的主要错误:您忘记将 :
放在 class 括号内。
提示:去掉 (
和 )
周围的 \r?\n
。你不想抓住那些。
您可以将其缩短一点:
Date Tripped:\s*([:\w\s]+)\r?\n
对于营业日期,这一个可以:
Business Date:\s([\w\s]+\([a-zA-Z]+\))
或更短:
Business Date:\s([\w\s]+\(\w+\))
您的(主要)错误:您转义了 \[
,此处不正确。接下来:[()]
匹配 (
和 )
,但不匹配 (Closed)
。
参见 regex101
您还可以使模式更具体一些,并使用一个模式来匹配两个选项。
\b(?:Business Date|Date Tripped):\s*(?:3[01]|[12][0-9]|0?[1-9])\s+[A-Za-z]+\s+\d{4}\s+(?:\([^()]+\)|(?:1[0-2]|0?[1-9]):[0-5]?[0-9]\s*[AP]M)
说明
\b(?:Business Date|Date Tripped):\s*
匹配其中一个选项(?:
非捕获组3[01]|[12][0-9]|0?[1-9]
匹配数字1-31
)
关闭群组\s+[A-Za-z]+\s+\d{4}\s+
匹配 1+ 个字符 A-Za-z 后跟 4 个数字(?:
非捕获组\([^()]+\)
从左括号匹配到右括号|
或(?:1[0-2]|0?[1-9]):[0-5]?[0-9]\s*[AP]M
匹配时间模式
)
关闭群组
请注意,该模式不会验证日期本身。