【问题标题】:Regular expression to evaluate following string用于评估以下字符串的正则表达式
【发布时间】:2017-05-19 11:37:14
【问题描述】:

我正在以

的形式获得用户输入

key1=value1,key2=value2,key3=value3

并且可以有任意数量的键值对,

我写了下面的正则表达式来评估上面的字符串。

[a-z0-9]+(:|=)[a-z0-9]+

但我不太确定,如何检查键值对的倍数,我写的这个字符串可以评估一个键值对,我想让它评估键值对的孔字符串。非常感谢您对此提出任何建议

【问题讨论】:

    标签: javascript regex regular-language


    【解决方案1】:

    试试

    ([a-z0-9]+(:|=)[a-z0-9]+,?)+
    

    删除结尾的逗号

    if(str.substr(-1) === ',')
      str = str.substr(0, str.length - 1)
    

    【讨论】:

    • 感谢您的解决方案,最后一个逗号不应出现在最后一个键值对的末尾,如何对其施加约束
    【解决方案2】:

    一种常见的方法是(ab)使用replace 一次性完成工作:

    str = "key1=value1,key2=value2,key3=value3"
    
    re = /(\w+)[:=](\w+)/g
    
    obj = {}
    
    str.replace(re, (_, $1, $2) => obj[$1] = $2)
    
    console.log(obj)

    【讨论】:

      【解决方案3】:

      试试这个正则表达式(\w+)[:=](\w+),?,其中第 1 组匹配键,第 2 组匹配值。

      你也可以使用 split,它可能会更快。

      var input = "your input";
      var pairs = input.split(",")
      for (i = 0; i < pairs.length; i++) {
          var parts = pairs[i].split(/[:=]/);
          var key = parts[0];
          var value = parts[1]
      }
      

      【讨论】:

      • 感谢解决方案,最后一个逗号不应出现在最后一个键值对的末尾,如何对其施加约束
      • 什么意思,要去掉末尾多余的逗号?
      猜你喜欢
      • 2017-07-16
      • 1970-01-01
      • 2012-07-01
      • 1970-01-01
      • 2016-04-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多