javascript - 我想在我的参数编辑器中使用正则表达式来验证标志和值

标签 javascript regex validation user-input

这是我的应用程序输入的样子。

-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/

相关文章:

javascript - JQuery 键盘 css 将颜色分配给具有特定类的按钮(键)失败

python - 如何使用 sed -n 但在 Python 中从文本文件中提取一系列行?

PHP 名称验证

javascript - 当我将鼠标悬停在 DIV 中的链接上时,我需要阻止 DIV 消失

javascript - 按属性在对象数组中查找重复项的最短方法

javascript - onfocusout 使用 jQuery Validate 在某些特定字段上

python - 使用Python提取包含单词的句子...以及它周围的句子?

regex - 使用正则表达式进行日志解析

javascript - 将单选按钮更改为图像会导致 jquery 验证丢失

java - 验证 ArrayList 的元素以匹配参数 (Java)