来自 GmailMessage 类正则表达式的 Google Apps 脚本 getPlainBody() 不起作用
Posted
技术标签:
【中文标题】来自 GmailMessage 类正则表达式的 Google Apps 脚本 getPlainBody() 不起作用【英文标题】:Google Apps Script getPlainBody() from GmailMessage class regex not working 【发布时间】:2021-10-23 06:40:37 【问题描述】:这是我关于 *** 的第一个问题,所以请告诉我如何提高其他人的可读性。
我正在尝试对我从 GmailMessage 类中的 getPlainBody() 获得的字符串使用正则表达式,但是当我尝试直接在 getPlainBody() 返回的字符串上执行此操作时它不起作用,但当我手动添加 \ 时效果很好n 个字符。
有效的代码:
function RegularExp()
//manually entered \n characters into string that I copied and pasted from getPlainBody()
var string = "Personal Message\nraw material: oak wood 100kg\nTRACKING NUMBER 7777777777\n<somehyperlink\nFROM SomeBrand";
//my goal is to get: raw material: oak wood 100kg
var regExp = new RegExp("(.*?)\n(?=TRACKING NUMBER)","g");
var PersonalMessage = regExp.exec(string)[1];
Logger.log(PersonalMessage); //works perfectly fine
不起作用的代码:
for (var j in messages)
var message = messages[j];
var plainText = message.getPlainBody(); //getting plainbody of fedex mail of interest
//trying to extract the personal message
var regExp = new RegExp("(.*?)\n(?=TRACKING NUMBER)","g");
var PersonalMessage = regExp.exec(plainText)[1];
Logger.log(PersonalMessage); //won't show anything
我的问题是为什么当我手动输入 \n 时它会起作用,但当我使用从 getPlainBody() 返回的字符串时它不起作用?我正在使用完全相同的正则表达式模式,但不知道为什么。
以下是我用来尝试解决问题的链接(或者我可能只是愚蠢,无法将解决方案应用于此问题)
Newline in gmail app script getplainbody function
Google Apps Script: getPlainBody() weird behavior
Regex - google apps script
谢谢
【问题讨论】:
试试这个:(.*?)\\n(?=TRACKING NUMBER)
@Alireza 我在有和没有 g 标志的情况下都试过了,但仍然没有工作:(
试试这些:([^\\n]+?)(?=\\nTRACKING NUMBER)
或 ([^\n]+?)(?=\nTRACKING NUMBER)
希望它对你有用。
@Alireza 什么...你是魔术师?! ..?!像魅力一样工作..我在 regexr.com 和其他网站上使用了我的第一个正则表达式代码 - 工作正常,但不知何故它在谷歌应用程序脚本中不起作用。请问你是怎么解决这个问题的?正则表达式非常有用,但绝对是一个挑战。
我会为它写一个答案和解释。
【参考方案1】:
问题在于 .
与 javascript 正则表达式(ECMAScript 风格)中的 CR 字符不匹配。
你可以使用
var regExp = /(.*)(?=\r?\nTRACKING NUMBER)/g;
正则表达式匹配
(.*)
- 第 1 组:除换行符以外的任何零个或多个字符(与 LF 和 CR 字符不匹配)
(?=\r?\nTRACKING NUMBER)
- 与紧随其后的位置匹配的正向前瞻
\r?
- 一个可选的 CR(回车符)
\n
- 换行符
TRACKING NUMBER
- 一些固定的字符串(在下一行的末尾)。
【讨论】:
以上是关于来自 GmailMessage 类正则表达式的 Google Apps 脚本 getPlainBody() 不起作用的主要内容,如果未能解决你的问题,请参考以下文章