JSFiddle - React, Tailwind, and code Playground

Recursive query parsing

by tonytlwu

HTML

<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>

JavaScript

var inputs = [
	"1,2,3",
  "1,[ , 2,3,],[4]",
  "",
  null,
  undefined,
  " [ 1 , 2 ] , 3  , [ 4 , [  5 , a , b , c  ] , 6 ] "
];

function splitQueryValues(input) {
	var splitPattern = /\,\s?(?![^\\[]*\])/;
  var testPattern = /^(?:\[[\w\W]*\])$/;

	if (_.isNil(input)) {
  	return [];
  }

	return ('' + input).trim().split(splitPattern).map(function (str) {
  	str = str.trim();

		if (!testPattern.test(str)) {
    	return str;
    }
    
    return _.compact(splitQueryValues(str.substring(1, str.length-1)));
  });
}

inputs.forEach(function (input) {
	console.log(input, splitQueryValues(input));
});