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
- 一些固定的字符串(在下一行的末尾)。
这是我关于 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
- 一些固定的字符串(在下一行的末尾)。