如何使用 ECMAScript 的匹配重置转换 PCRE 正则表达式模式?

How to convert a PCRE regex pattern with match reset for ECMAScript?

假设我有以下模式:

|              |                 |      |      |         |
|            |           |      |      |         |
|              |     |      |      |         |

我对 regex 表达式感兴趣,它可以匹配第二个和第三个 | 字符之间的任何内容,如下所示。

我可以使用以下模式 ^\|\s+\|\K\s+(?=\|) (regex demo here) 和 PCRE 风格来做到这一点。

但是,我的要求是找到 ECMAScript 风格支持的模式。在这种情况下,使用匹配重置(即 \K)不起作用。您对如何获得与 ECMAScript 类似的东西有什么想法吗?

如评论中所示,通过在 |.

上拆分字符串可以更容易求解

// The string with 'a', 'b', and 'c' added for clarity.
const string = "|              |        a         |      |      |         |\n|            |     b      |      |      |         |\n|              |   c  |      |      |         |";

// Print the string.
console.log(string);

// Split and print the regions between the 2nd and 3rd `|`.
string.split('\n').forEach(line => {
    console.log(line.split('|', 3)[2])
});

虽然拆分确实更容易,但我仍然想看看我是否可以使用正则表达式来做到这一点。您可以使用 lookahead 从行的开头匹配模式,并在 lookahead 中捕获您在捕获组中查找的内容。

示例:https://regex101.com/r/v0GnAN/1

(?=^\|[^|]*\|([^|]*?)\|)

这是一个前瞻组,它正在寻找两个 | 字符之间的任何内容,然后在捕获组中匹配相同的字符。这与 \K 方法略有不同,因为您的结果现在位于第 1 组而不是第 0 组。