我已经编写了一个谷歌应用程序脚本,它也非常接近我想要的工作方式。
目前,它将抓取收件箱中排名前100的电子邮件,对它们进行一些过滤,使用正则表达式抓取一些字段,然后创建一封带有抓取和格式化内容的电子邮件发送出去。
我正在废弃的这类电子邮件在很大程度上是标准化的。电子邮件的正文有预定义的字段,如:
主题:日期:答复日期:要求:合同编号:
因此,正则表达式搜索像"Subject:"这样的硬编码值,然后捕获冒号之后的所有内容,直到它碰到一个换行符。它这样做的声明:
content.match(/主题:(.*)/)
它将匹配冒号之后的任何内容,直到它碰到一个换行符为止。这几乎适用于我需要刮的所有田地。然而,其中一个问题有点麻烦。其中一个,我需要刮的最后一个(上面没有显示)将跨越多行。无法预测它会持续多久,但我有另一段预定义的文本,可以用来确定在哪里停止捕获。
因此,例如,一个字段可以跨越任意数量的行,然后在消息体中会出现一条类似于输入***结尾的消息。我想捕获从匹配子句开始的任何内容,例如。。。"subject:",当它击中预定义短语"***输入结束***"时停止
如何编写match子句正则表达式来完成此操作?
我做了很多研究,但没有什么成果。正则表达式不是我很擅长的东西。
提前感谢您的帮助。
您可以使用任何字符的延迟匹配,包括一个带有[sS]*?
的换行符,该换行符将通过前瞻检查来检查我们是否到达****end of input****
子字符串:
/Subject :s*([sS]*?)(?=*{4}end of input*{4})/
查看regex演示
然而,对于较长的文本,我宁愿使用相同正则表达式的展开版本:
/Subject :s*([^*]*(?:*(?!*{3}end of input*{4})[^*]*)*)/
请参阅另一个演示