JSFiddle - React, Tailwind, and code Playground
HTML
<div id="results"></div>
CSS
#results {
font-family: mono;
}
JavaScript
var test1 = "nestedObj['My key has spaces']";
var test2 = "abc [\"def ghi\" ].jkl[123][ 'mn o']";
function getKeys(str) {
// Regular expression for the first key in theKey
var reg = [
/^\s*\[\s*(\d+)\s*\]/, // Case 1: [ someIntegerKey ]
/^\s*\[\s*\'([^\']+)\'\s*\]/, // Case 2: [ 'someKey' ]
/^\s*\[\s*\"([^\']+)\"\s*\]/, // Case 3: [ "someKey" ]
/^\s*\.\s*([^\[\.]+)/ // Case 4: . someKey
];
var keys = [];
var tail = "." + str;
var success = true;
while (success) {
var result =
tail.match(reg[0]) ||
tail.match(reg[1]) ||
tail.match(reg[2]) ||
tail.match(reg[3]);
if (result) {
keys.push(result[1]);
tail = tail.slice(result[0].length);
} else {
success = false;
}
}
return keys;
}
console.log(getKeys(test1));
console.log(getKeys(test2));
document.getElementById("results").innerText = "Output: \n[" + getKeys(test1) + "]\n[" + getKeys(test2) + "]";