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

Javascript 如何格式化match()参数以在电子邮件中定位字符串?,javascript,Javascript,我发现下面的谷歌脚本似乎做了我想要的。它在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'; 但我不知道如何改进它。我应该使

我发现下面的谷歌脚本似乎做了我想要的。它在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';
但我不知道如何改进它。我应该使用regexp还是如何获取此内容。match();去上班好吗

电子邮件正文如下所示:

门店ID:123456
经理姓名:约翰·史密斯

我想将这两个数据位提取并写入谷歌表单,如下所示:

123456约翰·史密斯


以下是完整的脚本-

由于没有换行符,您当前的正则表达式无法使用您提供的字符串。也许您可以使用
\s
来匹配任何空白字符

您可以尝试使用以下正则表达式来捕获
StoreID
managerName

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';

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

编辑:如果内容正文包含多个
StoreID
ManagerName
,则可以将匹配项拆分为
StoreID
ManagerName
,如下所示:

var storeMatches = content.match(/Store ID:\s*(\d+)/g);
var managerMatches = content.match(/Manager Name:\s*(\w*\s*\w*)/g);
但是上面假设您没有任何空值


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

在“存储ID:”之后没有
\n
,因此表达式不匹配。此外,
[\s\s]
是一个无用的字符类,因为它匹配所有空白字符和非空白字符。不妨使用
试试
/Store ID:(\d+)/
(假设该值始终为数字)需要注意管理器名称后面的任何内容,因为这也会选择该名称up@Phil我同意。蒂姆,请注意菲尔的评论。如果您的字符串没有以经理名称结尾,正则表达式需要考虑到这一点。感谢您的快速响应!所以为了解释字符串的结尾,我尝试了以下方法。请告诉我匹配()是否更好。var label=“经理姓名:”;var nextLabel=“店铺ID:”;var pos=内容搜索(标签);变量开始=位置+标签长度;var end=content.search(nextLabel);//在下一个字段结束var距离=结束-开始;//首先结束,以便结果不是负的var ManagerName=content.substr(开始,距离);无法确定如何使我的代码正确显示在此论坛中spaced@TimSideris这是否意味着您将在一个字符串中有多个
存储ID
和ManagerName`条目?如果是这样,您可以将正则表达式拆分为仅匹配
StoreID
ManagerName
两个部分,只需在匹配列表中查找
StoreID
的匹配1对应于
ManagerName
的匹配1。如果总是有两个词表示
ManagerName
,那么您可以使用我答案末尾的选项。您还需要全局标记。我会用它来编辑我的答案。如果只是一句话,你的答案似乎没问题。