Google 来自 GmailMessage 的 Apps 脚本 getPlainBody() class 正则表达式不工作

Google Apps Script getPlainBody() from GmailMessage class regex not working

这是我关于 Whosebug 的第一个问题,所以请告诉我如何提高其他人的可读性。

我正在尝试对从 GmailMessage 中的 getPlainBody() 获得的字符串使用正则表达式 Class 但是不知何故,当我尝试直接对 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() 返回的字符串时却不起作用?我正在使用完全相同的正则表达式模式,但不明白为什么。

以下是我用来尝试解决我的问题的链接(或者我可能只是愚蠢而无法将解决方案应用于此问题)

谢谢

问题是 . 与 JavaScript 正则表达式(ECMAScript 风格)中的 CR 字符不匹配。

你可以使用

var regExp = /(.*)(?=\r?\nTRACKING NUMBER)/g; 

正则表达式匹配

  • (.*) - 第 1 组:除换行符以外的任何零个或多个字符(它不匹配 LF 和 CR 字符)
  • (?=\r?\nTRACKING NUMBER) - 与紧随其后的位置相匹配的正面前瞻
    • \r? - 一个可选的 CR(回车符 return 字符)
    • \n - 换行字符
    • TRACKING NUMBER - 一些固定的字符串(在下一行的末尾)。