将字符串拆分为键值对

4

如果匹配key: value,我希望能够通过逗号来分割以下字符串。如果在value中遇到逗号,则逗号分割将不起作用。

const string = "country: Kenya, city: Nairobi, population: 3.375M, democracy-desciption: Work in progress/ Not fully met, obstacles exist"

我想得到以下结果:

[[country: Kenya],
[city: Nairobi],
[population: 3.375M],
[democracy-description: Work in progress/ Not fully met, obstacles exist]]

Thank you in advance.


请仔细阅读以下内容:可以提问的主题需要避免的主题如何提出好问题如何创建最小化、完整化及可验证的示例,同时请参观 take the tour。我们非常愿意帮助您解决代码问题,但我们不会替您写代码。 - Serge K.
1
我已经阅读完了。@NathanP. - Nate
3个回答

7
您可以通过查看逗号是否跟随冒号来拆分字符串。

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; }


6

将字符串拆分为键值对数组,然后通过拆分每个键值对,将该数组映射为数组的数组:

const table =
 string.split(",") //["key:value","key:value"]
  .map(pair => pair.split(":")); //[["key","value"],["key","value"]]

构建一个对象,方法如下:
const result = Object.fromEntries(table);

//usable as:
console.log( result.country );

或者使用Map:

const result = new Map(table);

//usable as:
console.log( result.get("country") );

1
尝试这个...
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;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接