匹配模式多行 Integromat

问题描述

我想将多行中的特定模式与 Integromat 中的匹配模式进行匹配。语言是 ECMAScript (JavaScript) FLAVOR。

Salutation: Mr. x Mx. Mrs.

或者它看起来像这样:

Salutation: Mr. Mx. x Mrs.

我想获取 x\s 之后的字符串,以提取 Mr. Mx.Mrs.

目前,我在这一点上,但只有当 x 在 Mr. 之前才匹配

Salutation:\s(x\s(.*?)[\s])

我需要如何更改它?提前致谢!

解决方法

您可以使用带有交替的捕获组来匹配 Mr. Mrs. 或 Mx 的单个出现。

\bSalutation:.*?\sx\s(M(?:rs?|x)\.)

模式匹配:

  • \bSalutation: 逐字匹配
  • .*?\sx\s 尽可能至少匹配任何字符,直到空格字符之间第一次出现 x
  • ( 捕获组 1(在示例中称为 m[1]
    • M(?:rs?|x)\. 匹配 M 后跟 r 和可选的 s 或 x,然后是一个点
  • ) 关闭第 1 组

Regex demo

const regex = /\bSalutation:.*?\sx\s(M(?:rs?|x)\.)/;
[
  "Salutation: Mr. x Mx. Mrs.","Salutation: Mr. Mx. x Mrs.","Salutation: Mr. Mx. x Mr.",].forEach(s => {
  const m = s.match(regex);
  if (m) {
    console.log(m[1]);
  }
});


如果你想匹配 x 之后的所有出现,并且在 Javascript 版本中支持lookbehind:

(?<=\bSalutation:.*\sx\s.*)\bM(?:rs?|x)\.

Regex demo