拆分由'='符号分隔的pipe道分隔键 – 值对

我们正在接收一个input参数值作为pipe道分隔的键值对,用=符号分隔。 例如:

 "|User=0101|Name=ImNewUser|IsAdmin=0|RefId=23ae2123cd223bf235|" 

所以格式是: |KEY=VALUE|KEY_2=VALUE_2|....|KEY_n=VALUE_n|

我需要把它分成一个JSON对象。 所以,我的对象应该是:

 { 'User':'0101', 'Name':'ImNewUser', 'IsAdmin':'0', 'RefId'='23ae2123cd223bf235' } 

什么是最好的办法,因为有多种select:

  • 我可以用|分割 并再次在每个元素分裂=
  • 我可以依靠正则expression式并进行stringreplace。
  • 将其拆分为=删除尾部| 符号并将两个不同的数组与索引关联。

任何人都可以告诉我这样做最好/最有效的方法在JavaScript(在Node.js编程)?

第一个听起来不错:

 var str = "|User=0101|Name=ImNewUser|IsAdmin=0|RefId=23ae2123cd223bf235|"; var result = {}; str.split('|').forEach(function(x){ var arr = x.split('='); arr[1] && (result[arr[0]] = arr[1]); }); 

如果你决定使用正则expression式,请确保它阻止像这样的正则expression式:

 var result = {}; s.replace(/([^=|]+)=([^|]*)/g, function(noStep3, a, b) { result[a] = b; }); 

正则表达式铁路

 var str = "|User=0101|Name=ImNewUser|IsAdmin=0|RefId=23ae2123cd223bf235|"; var result = {}, name; str.substring(1, str.length-1).split(/\||=/).forEach(function(item, idx){ idx%2 ? (result[name] = item) : (name = item); }); 

我只是使用正则expression式来分组(见这里 )每个KEY=VALUE对,然后遍历它们来填充JSON对象。 所以你可以有这样的事情:

 var re = /(([^=\|]+)=([^=\|]+))/g; var match; var myString = "|User=0101|Name=ImNewUser|IsAdmin=0|RefId=23ae2123cd223bf235|"; while (match = re.exec(myString)) { console.log(match); // first iteration returns ["User=0101","User=0101","User","0101"] and so on } 

最干净的方式,你可以修改源分割不同的分隔符。

https://gist.github.com/allensarkisyan/5873977#file-parsequerystring-js

 `/** * @name - parseQueryString * @author - Allen Sarkisyan * @license - Open Source MIT License * * @description - Parses a query string into an Object. * - Optionally can also parse location.search by invoking without an argument */` ` function parseQueryString(queryString) { var obj = {}; function sliceUp(x) { x.replace('?', '').split('&').forEach(splitUp); } function splitUp(x) { var str = x.split('='); obj[str[0]] = decodeURIComponent(str[1]); } try { (!queryString ? sliceUp(location.search) : sliceUp(queryString)); } catch(e) {} return obj; } `