我有一个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:s*([:A-Za-z0-9s]+)r?n
您的主要错误是:忘记将:
放在类括号内。提示:去掉r?n
周围的(
和)
。你不想抓那些。
你可以把它缩短一点:
Date Tripped:s*([:ws]+)r?n
参见regex101
对于业务日期,这一个将起作用:
Business Date:s([ws]+([a-zA-Z]+))
甚至更短:
Business Date:s([ws]+(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
匹配时间模式
)
关闭组
Regex演示
请注意,该模式不会验证日期本身。