javascript - 我想在我的参数编辑器中使用正则表达式来验证标志和值
问题描述
这是我的应用程序输入的样子。
-T -a 10/06/01 -c stats,sag,cor,tra -P 0 --jsonReturn false --splash All anonymized data --prefix -3.0 --l -3
这里 (--) 后面的单词是标志,后面的值是用户输入。我希望正则表达式分别给我值和标志,以便我可以对它们运行验证。错误消息的示例如下:“无效的参数值”和“无效的参数值输入”。
这是我写的一个正则表达式,它将标志和值作为单独的组提供。
/([^\s=]+)(?:(?:=|\s+|[^--])([^ --][\w,]+))?/gm
这是一个比上面更好的正则表达式。
/([^\s=]+)(?:(?:=|\s+|[^--])([^ --]+))?/gm
以下是一些用于测试您的正则表达式的输入值。
-p 1 -n -1 -z zfile.csv --random false -d
--bucket null --prefix null --awskeyid null --awssecretkey null
解决方案
尝试以下正则表达式:
/(-{1,2}[^\s]+)(\s+".+?"|\s+[^\s-]+)?/g
它允许您使用双引号转义破折号和空格,例如:
-p 1 -n "-1" -z zfile.csv --random false -d
// Or
-T -a 10/06/01 -c stats,sag,cor,tra -P 0 --jsonReturn false --splash "All anonymized data" --prefix "-3.0" --l "-3"
双引号是值的一部分,也是前导空格,但我认为您会轻松处理它们。
编辑
这是一个完整的工作功能,可以使用:
function getOpts(opts) {
let regex = /(-{1,2}[^\s]+)(\s+".+?"|\s+[^\s-]+)?/g;
let flags = {};
let match;
while(match = regex.exec(txt)) {
let key = match[1];
let value = match[2];
if(value) value = value.replace(/^\s+|"/g,'');
flags[key] = value;
}
return flags;
}
推荐阅读
- git - 创建新标签后运行 github 操作
- swift - 从 SwiftUI 应用程序中更改推送通知授权
- javascript - Javascript循环:仅在最后一次迭代中插入元素
- php - 从 App\Entity\Students 到 App\Entity\Classes 的关系引用的列名“id”不存在
- python - 无法将日期字符串转换为日期时间对象
- android - @dagger.hilt.android.qualifiers.ApplicationContext android.content.Context 不能在没有@Provides-annotated 方法的情况下提供
- android-studio - 插页式广告首先显示并进入下一个活动
- r - 为使用 reactable 创建的表添加标题
- matplotlib - 如何使 barplot 中的条不从 0 开始(matplotlib)
- ruby-on-rails - 修改内存中的记录时 find 和 find_by 的区别