regex - 是否有可能选择组中的所有备选方案
问题描述
在我的正则表达式中有一个有 3 个选项的组。在正则表达式测试之后,只有最后出现的替代项被选择到选择组中。是否有可能选择所有发生的替代方案?
我曾经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}`);
});
}
目前,正则表达式匹配只会返回最后一次出现的替代项。
示例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)*))*$
推荐阅读
- android - 将变量传递给分页库类
- api - 从何处调用 Azure Blob 存储 API - Web 应用服务器端或 azure 函数
- python - 使用带有 Pandas DataFrame 的 NumPy 函数计算样本统计信息
- java - JavaFX用鼠标画线
- javascript - 除焦点外的每个输入元素的 Jquery
- sikuli - 在java中使用sikuli查找匹配图像的坐标
- macos - 使用 XAMPP 将 cakePHP 应用程序部署到本地主机
- django - Django允许在另一个进程完成之前返回响应
- javascript - 如何使 Jest 模拟函数 toHaveBeenCalledTimes 对每个测试套件都有新的计数?
- javascript - Javascript,无法读取 JSON 格式的字符串