如何正则表达式 Zapier 并获得输出?

How to regex Zapier and get output?

我经常收到来自同一个人的电子邮件,每封电子邮件都包含一个或多个唯一识别码。我需要获取这些代码。

电子邮件正文包含大量不一致的电子邮件内容,但这是我感兴趣的字符串。它们看起来像...

这些字符串的共同点似乎是,它们的长度都是 32 个字符,并且都是由大写字母、小写字母、数字和符号混合而成。但是给定的电子邮件可能包含 none,一个或多个,并且字符串将处于不可预测的位置,而不是像上面那样在相邻的行上。

我希望在 Zapier(Web 服务的链接工具)中创建一个 Zap 工作流程,以找到这些字符串并在另一个应用程序中使用它们 - 即。每当找到字符串时,创建一个新的 Trello 卡片。

我已经开始使用 Zapier 的 "Gmail" 集成作为 "trigger" 的工作流程,特别是使用与常规发件人对应的 "from:" 字段进行搜索。这是简单的部分。

但是电子邮件正文的实际解析让我感到困惑。 Zapier 有一个基本的电子邮件解析器,但它不适合这个任务。合适的是使用 Zapier 自己的“Code”集成来执行自由形式的代码——即识别那些字符串的正则表达式。

我以前从未这样做过,并且正在努力制定工作代码。 Zapier Code 可以采用 Python (documentation) 或 Javascript (documentation)。它支持数据变量"input_data"(Python)或"inputData"(Javascript)和"output"(两者)。

请参阅下文,我如何将 Gmail 正文插入 "body" 进行解析...

我需要使用代码框构造一个正则表达式来查找每个唯一标识符字符串并将其作为输入输出到工作流中的下一个集成,即。特雷洛

请注意,在上面的屏幕截图中,框中现有的 "hello world" 代码是 Zapier 自己的测试代码。字段 "id" 和 "hello" 可供链中的下一个工作流应用程序使用。

但我需要对电子邮件正文中找到的所有字符串执行我的处理 - 即。如果一封电子邮件只包含一个代码,则创建一张 Trello 卡片;但如果一封电子邮件包含四个代码,请为这四个中的每一个创建一个 Trello 卡片。

也就是说,可以有多个输出。我不知道这是如何工作的,因为我认为这些工作流程应该只适用于一个动作。

我需要一些帮助才能翻过山。谢谢。

来自 Zapier 平台团队的 David。

很高兴您对代码步骤表现出兴趣。假设您的假设(正好是 32 个字符)总是正确的,这应该相当简单。

首先,正则表达式。我们要寻找一个字符,它是字母、数字或标点符号。幸运的是,javascript 的 \w 等同于 [A-Z0-9a-z_],它涵盖了除我们将手动包含的 - 之外的所有示例中的基础。最后,我们想要恰好 32 个字符长度的字符串,因此我们将要求它。我们还想添加 g 全局标志,以便找到所有匹配项,而不仅仅是第一个。所以我们有以下内容:

/[\w-]{32}/g

您已经涵盖了 body 中的映射,这很好。 javascript 代码如下:

// stores an array of any length (0 or more) with the matches
var matches = inputData.body.match(/[\w-]{32}/g) 

// the .map function executes the nameless inner function once for each 
// element of the array and returns a new array with the results
// [{str: 'loYm9vYzE6Z-aaj5lL_Og539wFer0KfD'}, ...]
return (matches || []).map(function (m) { return {str: m} })

在这里,您将利用代码步骤的一个未记录的功能:当您 return 一个 object 数组时,每个 object 执行一次后续步骤.如果你 return 一个空数组(如果没有找到键就会发生这种情况),zap 停止并且没有其他事情发生。当您进行测试时,没有迹象表明除了第一个结果之外还有任何其他结果。一旦你的 zap 打开并真正运行,它就会像这里描述的那样散开。

仅此而已!希望这一切都有意义。如果您还有其他问题,请告诉我!