如何格式化match()参数以在电子邮件中查找字符串?

时间:2016-05-09 02:02:01

标签: javascript

我发现以下Google脚本看起来像我想要的那样。它在MyLabel中搜索电子邮件,但不是找到“StoreID:”的字符串,而是在我的Google表格中返回该字符串后面出现的字符,它只返回“No Store ID”的“false”响应。

需要改进的代码是:

  tmp = content.match(/Store ID:\n([\s\S]+)/);
  var StoreID = (tmp && tmp[1]) ? tmp[1] : 'No Store ID';

但我无法弄清楚如何改进它。我应该使用正则表达式,或者我如何获得这个content.match();工作,拜托?

电子邮件的正文如下所示:

  

商店ID:123456
  经理姓名:John Smith

我想提取并写入Google表格,这两项数据如下所示:

  

123456 John Smith

以下是完整的脚本 - http://i.stack.imgur.com/WtyrA.png

1 个答案:

答案 0 :(得分:0)

根据您提供的字符串,您当前的正则表达式不起作用,因为没有换行符。也许您可以使用\s来匹配任何空格字符。

您可以尝试使用以下正则表达式捕获StoreIDmanagerName

tmp = content.match(/Store ID:\s*(\d+)\s*Manager Name:\s*(.*)/);
var storeID = (tmp && tmp[1]) ? tmp[1]: 'No Store ID';
var managerName = (tmp && tmp[2]) ? tmp[2]: 'No manager name';

Regex101

如果您碰巧知道经理姓名结果始终以Firstname LastName的格式返回,则可以将.*替换为\w*\s*\w*以获得更具体的匹配。这将防止管理器名称后的字符被捕获为管理器名称本身的一部分。

修改:如果内容正文包含多个StoreIDManagerName,那么您可以将匹配分为StoreIDManagerName而不是上述内容。 {1}}喜欢这样:

var storeMatches = content.match(/Store ID:\s*(\d+)/g);
var managerMatches = content.match(/Manager Name:\s*(\w*\s*\w*)/g);

但以上假设您没有任何空值。

最好用换行符分割行,然后匹配上面的行。