Reputation: 53
I want to split the following string by comma if it matches key: value
. Split by comma works until it encounters a comma in the value
const string = "country: Kenya, city: Nairobi, population: 3.375M, democracy-desciption: Work in progress/ Not fully met, obstacles exist"
I'd like to end up with this result:
[[country: Kenya],
[city: Nairobi],
[population: 3.375M],
[democracy-description: Work in progress/ Not fully met, obstacles exist]]
Thank you in advance.
Upvotes: 4
Views: 21008
Reputation: 138267
Split into an array of key-value pair strings, then map that array to an array of arrays by splitting each pair:
const table =
string.split(",") //["key:value","key:value"]
.map(pair => pair.split(":")); //[["key","value"],["key","value"]]
To built an object out of this:
const result = Object.fromEntries(table);
//usable as:
console.log( result.country );
or use a Map:
const result = new Map(table);
//usable as:
console.log( result.get("country") );
Upvotes: 6
Reputation: 109
try this one...
function getParameters() {
var paramStr = location.search.substring(1).split("&");
var parameters = {}
paramStr.map(item=>{
let keyValue = item.split('=')
return parameters[keyValue[0]] = keyValue[1];
})
return parameters;
}
Upvotes: 1
Reputation: 386560
You could split the string by looking if not a comma follows and a colon.
var string = "country: Kenya, city: Nairobi, population: 3.375M, democracy-desciption: Work in progress/ Not fully met, obstacles exist, foo: bar, bar, bar";
console.log(string.split(/, (?=[^,]+:)/).map(s => s.split(': ')));
.as-console-wrapper { max-height: 100% !important; top: 0; }
Upvotes: 7