Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 是否有可能选择一组中的所有备选方案_Regex_Regex Group - Fatal编程技术网

Regex 是否有可能选择一组中的所有备选方案

Regex 是否有可能选择一组中的所有备选方案,regex,regex-group,Regex,Regex Group,在我的正则表达式中,有一个组有3种选择。在正则表达式测试之后,只有最后出现的替代项被选择到选择组中。 是否有可能选择所有出现的备选方案 我使用regex101来测试我的结果 如果这对您不起作用,下面是一个自动生成的代码来测试这个正则表达式: const regex=/clone\s+[^\/]+\s+[^\/]+?:\s*?:-flag1 | flag2 | flag3*$/gm; const str=`clone 克隆a和b 克隆一个b-flag1 克隆a b-flag1-flag2 克隆a

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

我使用regex101来测试我的结果

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

const regex=/clone\s+[^\/]+\s+[^\/]+?:\s*?:-flag1 | flag2 | flag3*$/gm; const str=`clone 克隆a和b 克隆一个b-flag1 克隆a b-flag1-flag2 克隆a b-标志1-未知 克隆a b-- 克隆a b-flag1-flag2-flag3`; 让m; 而m=regex.execstr!==空的{ //这是避免具有零宽度匹配的无限循环所必需的 如果m.index==regex.lastIndex{ regex.lastIndex++; } //可以通过'm`-变量访问结果。 m、 forEachmatch,groupIndex=>{ log`find match,group${groupIndex}:${match}`; }; } 此时,正则表达式匹配将只返回替换项的最后一次出现

克隆a b-flag1-flag2-flag3的示例:

我想知道是否有办法

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

注意:标志可以随机顺序出现

例如:


任何帮助和提示都将不胜感激。

您可以为每个标志单独分组,然后将它们全部捕获

克隆\s+[^\/]+\s+[^\/]+?:\s*?:-flag1*\s*-flag2*\s*-flag3**$
哦,我希望有一种方法可以减少代码,但这确实有效,所以非常感谢!!!哦,一开始我没注意到。我一开始就忘了在问题中提到这一点。如果组未排序,则不会选择它们:好的,因此如果您只想要特定的标志,而不是任何字符串,并且它们需要以随机顺序出现,并且也不存在,那么我们不能通过捕获组来完成。最简单的方法是将所有标志捕获到一个组中,然后将其按空间分割,并用代码逐个检查每个标志。即:克隆\s+[^\/]+\s+[^\/]+\s*?.*$。这将把所有标志子字符串放入标志匹配组,请参见Yeap。最后,我使用了一些JS来正确地获取标志,并使用了初始regex版本来确保模式是正确的。似乎没有办法用正则表达式实现我想要的。无论如何,谢谢你的帮助。我会记下这是答案。
"match":[ 
    "clone a b    --flag1   --flag2 --flag3",
    "a",
    "b",
    ["flag1", "flag2", "flag3"]
],
"match":[ 
    "clone a b    --flag1   --flag2 --flag3",
    "a",
    "b",
    "flag1",
    "flag2",
    "flag3"
],