【问题标题】:Retrieve values for custom parameters from a string [closed]从字符串中检索自定义参数的值 [关闭]
【发布时间】:2016-04-16 10:55:51
【问题描述】:

我需要从字符串中检索自定义参数的值。

字符串示例:aaa[111] bbb[222] ccc[333] ddd[444]

我需要为参数aaa等获取111的值...

参数名称是事先知道的(这里:aaabbbcccddd)。

也许使用正则表达式,但我不知道如何继续。

【问题讨论】:

  • 最终结果应该是什么?
  • 最终结果应该是 4 个变量(比如 aaa、bbb、ccc、ddd)和结果(这里:111、222、333、444)
  • 你想要this这样的东西
  • 不完全是因为某些参数可能丢失或顺序不同。示例 1:aaa[111] d[444] 示例 2:ccc[333] bbb[222]。我忘了在我的问题中提到这一点。对此感到抱歉。

标签: javascript jquery regex


【解决方案1】:

试试这个

var output = {}; 
var str = "aaa[111] bbb[222] ccc[333] ddd[444]";
str.split(/\s+/).forEach(function(val){ 
  var key = val.substring(0, val.indexOf("[")); 
  var value = val.substring( val.indexOf("[") + 1, val.indexOf("]") ); 
  output[key] = value; 
});

document.body.innerHTML += JSON.stringify(output,0,4);

您可以使用此输出变量来获取每个参数的值。

output["aaa"]; // outputs 111

【讨论】:

  • 这似乎是一个很好的答案。我立即测试它。
【解决方案2】:

使用带有回调(替换器)的String.replace 函数的简单“技巧”:

var str = "aaa[111] ddd[444] bbb[222] ccc[333]",
    re = /\b(\w+?)\[(\d+?)\]/g,
    result = {};

str.replace(re, function(m, $1, $2){
    result[$1] = $2;
});

document.write("<pre>" + JSON.stringify(result,0,4) + "</pre>");        

现在,result 对象包含所有需要的具有适当值的参数

【讨论】:

    【解决方案3】:

    您可以使用str.match 方法。

    var str = "aaa[111] bbb[222] ccc[333] ddd[444]";
    var strarr=str.match(/\w+\[\w+\]/g);
    var val={};
    var accounting = [];
    for(var i=0;i<strarr.length;i++)
    {
        var val1 = strarr[i].match(/\w+(?=\[)/);
      var val2 = strarr[i].match(/\w+(?=\])/);
        val[val1] = val2
        
    }
    
    alert(JSON.stringify(val));

    【讨论】:

    • 完成,感谢您发现..
    【解决方案4】:

    一个简单的正则表达式实现是/(\w+)\[([^\]]+)\]/g,它可以用来提取这样的参数:

    var paramRegex = /(\w+)\[([^\]]+)\]/g;
    
    function extractParams(string) {
      var params = {
        aaa: null,
        bbb: null,
        ccc: null
      };
    
      var match;
      while (match = paramRegex.exec(string)) {
        var name = match[1];
        var value = match[2];
    
        if (params.hasOwnProperty(name)) {
          params[name] = value;
        }
      }
    
      return params;
    }
    
    var test = extractParams(
      "aaa[123] bbb[foo] ccc[some_other_thing] bar[...]"
    );
    
    console.log(test);

    【讨论】:

      【解决方案5】:

      RegExp#exec 的另一种解决方案

      var string='aaa[111] bbb[222] ccc[333] ddd[444]',
          pattern= /(\S+)\[(\d+)\]/g,
          result = {},
          r;
      
      while ((r = pattern.exec(string)) != null) {
          result[r[1]] = r[2];
      }
      
      document.write('<pre>' + JSON.stringify(result, 0, 4) + '</pre>');

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-08-02
        • 2013-12-04
        • 2011-04-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多