问题描述
我想将多行中的特定模式与 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 组
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)\.