将查询字符串解析为对象

时间:2014-06-19 21:12:35

标签: javascript node.js socket.io

我有来自cookie的字符串:

"io=ZCgMK9hyc95vNRBMAAAA; vsid=910vr1505908332008888; csrftoken=FQCHNYIOvrAQztBHPNQlCiy4xorlZVs5; sessionid=uaggm1q1rcxy2o49noaw4b6djg8j18by"

,我需要将其解析为javascript对象。我试图使用这个RegExp:

var uri = socket.request.headers.cookie
        var queryString = {};
        uri.replace(
            new RegExp("([^?=&]+)(=([^&]*))?", "g"),
            function($0, $1, $2, $3) { queryString[$1] = $3; }
        );

但它对我不起作用,因为在cookie中我只有字符串中的params而没有任何域名。当然我可以在开头添加一些域名,但我不想创建这样一个丑陋的代码

3 个答案:

答案 0 :(得分:1)

只需迭代并填写对象

var queryString = {};

uri.split(';').forEach(function(item) {
    var parts = item.split('=');
    queryString[parts[0].trim()] = parts[1].trim();
});

FIDDLE

将数据作为JSON存储在cookie中似乎更容易。

答案 1 :(得分:0)

此功能正常:

function parseCookies (request) {
    var list = {},
        rc = request.headers.cookie;

    rc && rc.split(';').forEach(function( cookie ) {
        var parts = cookie.split('=');
        list[parts.shift().trim()] = unescape(parts.join('='));
    });

    return list;
}

答案 2 :(得分:0)

使用标准querystring.parse与';'作为分隔符。