如何在 javascript 中将管道分隔的字符串解析为键值对

How Do I Parse a Pipe-Delimited String into Key-Value Pairs in Javascript

本文关键字:字符串 键值对 分隔 管道 javascript      更新时间:2023-09-26

我想将以下类型的字符串解析为 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是"Fort Myers")。

请注意,"|枸杞|
' 紧跟在每个键值对之前。

最好的方法是什么?

我刚刚意识到它在技术上是一种带有有趣行尾的 csv 格式。 这样做有限制,因为您的变量值不能包含任何 |或
因为它们是定义字符串结构的标记。 你当然可以逃脱它们。

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);

如果您有下划线(如果您没有,那么只需在他们的网页上打开控制台来尝试一下,因为它们包含下划线:)

然后玩弄一下。 这是您旅程的开始:

_.compact(stringVar.split(/<br>|EOR|'|/))

尝试

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>在解析之前可丢弃
  • 每条记录都是一组由 |(管道)
  • 每条记录的第一个元素是键
  • 第二个和第三个元素组合形成值
  • 第四个元素是可丢弃的。