I have this string.
'"pen pineapple" apple pen "pen pen"'
Is there a good way to convert it into an object which would look like this:
{
a: "pen pineapple",
b: "apple",
c: "pen",
d: "pen pen"
}
I am looking for a solution in pure javascript!
I have this string.
'"pen pineapple" apple pen "pen pen"'
Is there a good way to convert it into an object which would look like this:
{
a: "pen pineapple",
b: "apple",
c: "pen",
d: "pen pen"
}
I am looking for a solution in pure javascript!
 
    
    Splitting strings that have quotes...
https://stackoverflow.com/a/18647776/2725684
Then converting that array into an object...
https://stackoverflow.com/a/4215753/2725684
So, when you combine these answers, it looks like this...
var myRegexp = /[^\s"]+|"([^"]*)"/gi;
var myString = '"pen pineapple" apple pen "pen pen"';
var myArray = [];
do {
    var match = myRegexp.exec(myString);
    if (match != null) {
        myArray.push(match[1] ? match[1] : match[0]);
    }
} while (match != null);
var obj = myArray.reduce(function(acc, cur, i) {
  acc[i] = cur;
  return acc;
}, {});
console.log(obj);
You could use an adapted version of Split a string by commas but ignore commas within double-quotes using Javascript and use Number#toString method for the keys.
var str = '"pen pineapple" apple pen "pen pen"',
    arr = str.match(/(".*?"|[^" \s]+)(?=\s* |\s*$)/g),
    object = {};
arr.forEach(function (a, i) {
    object[(i + 10).toString(36)] = a.replace(/"/g, '');
})    
console.log(object); 
    
     
    
    This might not be the most efficient function but does what you need (returns array)
function splitter(inputString) {
    var splitted = inputString.split(' ');
    var out = []
    var temp = "";
    var quoteStarted = false;
    for (i = 0; i < splitted.length; i++) {
        if (splitted[i].indexOf('"') > -1 && !quoteStarted) {
            temp += splitted[i] + " ";
            quoteStarted = true;
        } else if (quoteStarted && splitted[i].indexOf('"') == -1) {
            temp += splitted[i] + " ";
        } else if (quoteStarted && splitted[i].indexOf('"') > -1) {
            temp += splitted[i];
            out.push(temp);
            quoteStarted = false;
            temp = "";
        } else {
            out.push(splitted[i])
        }
    }
    return out;
}
 
    
    It can be achieved in pure javascript like this way
let str = '"pen pineapple" "apple" "pen" "pen pen"'
let obj = {}
let pattern = /".*?"/g;
let index = ["a","b","c","d","e"]
let i=0
let key
while(current = pattern.exec(str))
 {
   key = index[i]
   obj[key] = current[0].replace('"','')
   i++
 }
console.log(obj)