JSFiddle - React, Tailwind, and code Playground

HTML

<script type="module">
	//build regexes without worrying about
	// - double-backslashing
	// - adding whitespace for readability
	// - adding in comments
	let clean = (piece) => (piece
		.replace(/((^|\n)(?:[^\/\\]|\/[^*\/]|\\.)*?)\s*\/\*(?:[^*]|\*[^\/])*(\*\/|)/g, '$1')
		.replace(/((^|\n)(?:[^\/\\]|\/[^\/]|\\.)*?)\s*\/\/[^\n]*/g, '$1')
		.replace(/\n\s*/g, '')
	);
	window.regex = ({raw}, ...interpolations) => (
		new RegExp(interpolations.reduce(
			(regex, insert, index) => (regex + insert + clean(raw[index + 1])),
			clean(raw[0])
		))
	);
</script>

Output is in the console.

JavaScript

let r = regex`^\s*
	(
		//closing the object
		(\})|

		//starting from open or comma you can...
		(?:[,{]\s*)(?:
			//have a rest operator
			(\.\.\.)
			|
			//have a property key
			(
				//a non-negative integer
				\b\d+\b
				|
				//any unencapsulated string of the following
				\b[A-Za-z$_][\w$]*\b
				|
				//a quoted string
                //this is #5!
				("|')(?:
					//that contains any non-escape, non-quote character
					(?!\5|\\).
					|
					//or any escape sequence
					(?:\\.)
				//finished by the quote
				)*\5
			)
			//after a property key, we can go inside
			\s*(:|)
      |
      \s*(?={)
		)
	)
	((?:
		//after closing we expect either
		// - the parent's comma/close,
		// - or the end of the string
		\s*(?:[,}\]=]|$)
		|
		//after the rest operator we expect the close
		\s*\}
		|
		//after diving into a key we expect that object to open
		\s*[{[:]
		|
		//otherwise we saw only a key, we now expect a comma or close
		\s*[,}{]
	).*)
$`;

console.log(r);

let input = '{why, hello, there, "you   huge \\"", 17, {big,smelly}}';
for (
	let parsed;
    parsed = input.match(r);
    input = parsed[parsed.length - 1]
) console.log(parsed[1]);