Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Javascript中,用逗号分隔并用括号包围的字符串生成数组_Javascript_Regex_Mongodb_Mongoose - Fatal编程技术网

在Javascript中,用逗号分隔并用括号包围的字符串生成数组

在Javascript中,用逗号分隔并用括号包围的字符串生成数组,javascript,regex,mongodb,mongoose,Javascript,Regex,Mongodb,Mongoose,我试图在特定条件下用Javascript将字符串解析为数组: 字符串中的每个逗号分隔不同的数组元素 用括号括起来的元素是元素的子数组 在他们之前 例如: total, limit, items(added_at, added_by) 将变成 [total, limit, items[added_at, added_by]] 有关我为什么这样做的更多信息: 我试图使用Mongoose和MongoDB复制SpotifyAPI的限制字段逻辑 要仅获取曲目总数和请求限制,请执行以下操作: field

我试图在特定条件下用Javascript将字符串解析为数组

  • 字符串中的每个逗号分隔不同的数组元素

  • 用括号括起来的元素是元素的子数组 在他们之前

  • 例如:

    total, limit, items(added_at, added_by)
    
    将变成

    [total, limit, items[added_at, added_by]]
    
    有关我为什么这样做的更多信息

    我试图使用Mongoose和MongoDB复制SpotifyAPI的限制字段逻辑

    要仅获取曲目总数和请求限制,请执行以下操作:
    fields=总计,限额

    点分隔符可用于指定不重复出现的字段,而圆括号可用于指定对象内重复出现的字段。例如,要仅获取加法器的添加日期和用户ID:
    fields=items(在处添加,由.id添加)

    使用多个括号向下钻取嵌套对象,例如:
    fields=items(曲目(姓名、href、相册(姓名、href))


    链接:

    这里有一种方法,将字符串分块成令牌和堆栈运算符:

    function parseNestedList(str) {
        let pattern = /([^(),]*)([(),]?)/gm;
        let part, ret = [], stack = [], context = ret;
    
        while (((part = pattern.exec(str)) !== null) && (part[0].length > 0)) {
            if (part[1].length) { context.push(part[1]); } // Push token
    
            switch (part[2]) {
                case "(": // Descend
                    stack.push(context);
                    context.push(context = []);
                    break;
                case ",": // Next
                    continue;
                default: // Ascend
                    context = stack.pop();
            }
        }
    
        return ret;
    }