是否有可能 select 一组中的所有替代方案

Is there a possibility to select all alternatives in a group

在我的正则表达式中有一组有 3 个备选方案。在正则表达式测试之后,只有最后出现的选项被 selected 到 select 组中。 是否有可能 select 所有发生的替代方案?

我用 regex101 来测试我的结果。

https://regex101.com/r/iBxX9V/4

如果这对您不起作用,这里有一个自动生成的代码来测试这个正则表达式:

const regex = /clone\s+([^ \/]+)\s+([^ \/]+)(?:\s*(?:--(flag1|flag2|flag3)))*$/gm;
const str = `clone
clone a b
clone a b --flag1
clone a b  --flag1 --flag2
clone a b --flag1 --unknown
clone a b -- --
clone a b    --flag1   --flag2 --flag3`;
let m;

while ((m = regex.exec(str)) !== null) {
    // This is necessary to avoid infinite loops with zero-width matches
    if (m.index === regex.lastIndex) {
        regex.lastIndex++;
    }

    // The result can be accessed through the `m`-variable.
    m.forEach((match, groupIndex) => {
        console.log(`Found match, group ${groupIndex}: ${match}`);
    });
}

目前,正则表达式匹配只会 return 最后一次出现的替代项。

clone a b --flag1 --flag2 --flag3 示例:

"match":[ 
    "clone a b    --flag1   --flag2 --flag3",
    "a",
    "b",
    "flag3"
],

不知有没有办法得到

"match":[ 
    "clone a b    --flag1   --flag2 --flag3",
    "a",
    "b",
    ["flag1", "flag2", "flag3"]
],

"match":[ 
    "clone a b    --flag1   --flag2 --flag3",
    "a",
    "b",
    "flag1",
    "flag2",
    "flag3"
],

注意:标志可以随机出现。

示例:https://regex101.com/r/iBxX9V/7

感谢任何帮助和提示。

你可以为每个旗帜做一个单独的组,然后你就会把它们都抓起来

clone\s+([^ \/]+)\s+([^ \/]+)(?:\s*(?:(--flag1)*\s*(--flag2)*\s*(--flag3)*))*$

https://regex101.com/r/iBxX9V/6