Regex 是否有可能选择一组中的所有备选方案
在我的正则表达式中,有一个组有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的示例: 我想知道是否有办法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
"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"
],