我想将以下类型的字符串解析为Javascript对象中的键值对:
var stringVar = 'PLNC||0|EOR|<br>SUBD|Pines|1|EOR|<br>CITY|Fort Myers|1|EOR|<br>';
4个大写字母(PLNC,SUBD和CITY)的每个单词都是一个键,而紧接着的管道中的单词是值(对于PLNC,第一个单词将是未定义的) ,SUBD的那个将是'Pines',CITY的那个将是'迈尔斯堡')。
请注意,'| EOR |
'紧跟在每个键值对之前。
这样做的最佳方式是什么?
答案 0 :(得分:2)
我刚刚意识到它在技术上是一种带有趣的行结尾的csv格式。这有一些限制,因为您的变量值不能包含任何|或者&lt; BR&GT;因为它们是定义字符串结构的标记。你当然可以逃脱它们。
var stringVar = 'PLNC||0|EOR|<br>SUBD|Pines|1|EOR|<br>CITY|Fort Myers|1|EOR|<br>';
function decodeString(str, variable_sep, line_endings)
{
var result = [];
var lines = str.split(line_endings);
for (var i=0; i<lines.length; i++) {
var line = lines[i];
var variables = line.split(variable_sep);
if (variables.length > 1) {
result[variables[0]] = variables[1];
}
}
return result;
}
var result = decodeString(stringVar, "|", "<br>");
console.log(result);
答案 1 :(得分:0)
如果你有underscore(如果你没有,那么只需在他们的网页上打开你的控制台就可以试试这个,因为他们有下划线:)
然后再玩一下吧。这是您旅程的开始:_.compact(stringVar.split(/<br>|EOR|\|/))
答案 2 :(得分:0)
尝试
function parse(str) {
var str = str.replace(/<br>/gi);
console.log(str);
var arr = str.split('|');
var obj = {};
for (var i=0; i<arr.length; i=i+4) {
var key = arr[i] || '';
var val_1 = arr[i+1] || '';
var val_2 = arr[i+2] || '';
if(key) {
obj[key] = val_1 + ':' + val_2; //or similar
}
}
return obj;
}
这将适用于问题中的特定数据字符串。
它也适用于相同通用格式的其他数据字符串,但依赖于:
<br>
在解析之前可以丢弃