这可以使用正则表达式模式(捕获组)吗?

Can this do-able using regular expressions patterns (capture groups)?

在 JS 中,我有一组字符串需要分解成一个数组。每个字符串最多可以细分为 5 组(有些更少)。我正在使用正则表达式来打破所有。

下面的字符串集中如果包含aabb或者cc需要进入捕获组2.

不幸的是,我对正则表达式不是很熟悉,所以卡在了这里。

这个模式只能使用正则表达式吗,还是我必须打破从 ::| 并在以后展开它?

我的正则表达式模式 ^[ \t]*(?:(?:(\w+)\|)?(?:(\w+):(?:(\w+):)?)?)?(\w+)::(\w+)$ DEMO

字符串集(JS 循环中的每一行 运行):

                 group4::group5
              aa:group4::group5
              bb:group4::group5
              cc:group4::group5
          group1|group4::group5
       group1|aa:group4::group5

          group3:group4::group5
       aa:group3:group4::group5
   group1|group3:group4::group5
group1|aa:group3:group4::group5

最后的结果应该可以出这个...

var groups = {1:"group1", 2:"group2", 3:"group3", 4:"group4", 5:"group5"};

如果有人可以帮助我,正则表达式模式就足够了

您可以使用此 PCRE 正则表达式,其中包含一个 分支重置组 、5 个独立的捕获组、少量可选匹配项和非捕获组:

^\h*(?:(?:(\w+)\|)?(?|(?:(aa|bb|cc):(?:(\w+):)?)|(?:((?2)):)?(\w+):)?)?(\w+)::(\w+)$

Updated RegEx Demo

PS:分支重置组在 Javascript 中不起作用。