这是我的应用程序输入的样子。
-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;
}
关于javascript - 我想在我的参数编辑器中使用正则表达式来验证标志和值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57999270/