gpt4 book ai didi

javascript - 分割键 : value; pairs and exclude whitespace in matches

转载 作者:行者123 更新时间:2023-11-30 17:24:07 25 4
gpt4 key购买 nike

假设我们有这样一个字符串:' key1 : value1 ; key2 : value2 value3 ' 我们想把它转换成javasript-object。我们可以匹配任何不是定界符 (:;) 的内容并捕获这些匹配项。太好了,用一个简单的正则表达式就完成了这项工作:

/([^:]+):?([^;]+);?/g

我当前的 RegExp 的问题是,它还在结果中包含空格。所以上面的字符串将导致这样的结果:

{
" key1 ": " value1 ",
" key2 ": " value2 value3 "
}

不是我们真正想要的...所以我将 RegExp 更改为:

/\s*([^:]+)\s*:?\s*([^;]+);?\s*/g

啊,该死!字符集 [^:]+ 匹配任何非冒号的内容(空格)。什么会导致这样的结果:

{
"key1 ": "value1 ",
"key2 ": "value2 value3 "
}

知道我们如何只捕获/,而不在匹配中包含空格。这样我们的结果看起来像这样:

{
"key1": "value1",
"key2": "value2 value3"
}

顺便说一下,完整的解析函数是这样的:

var parseAttributes = function (attribute) {
var REGEX_SPLIT_PAIRS = /;?([^:]+):?([^;]+);?/g;
var attributes = {};
var match;

while (match = REGEX_SPLIT_PAIRS.exec(pairs)) {
attributes[match[1]] = match[2];
}

return attributes;
};

编辑

另一种方法是将属性-字符串拆分为成对 block 。但是,我考虑一个没有 trim 的纯 RegExp 解决方案:

var parseAttributes = function (attribute) {
var attributes = {};

attribute.split(';').forEach(function (pair) {
var pairs = pair.split(':');
if (pairs && pairs[0] && pairs[1]) {
attributes[pairs[0].trim()] = pairs[1].trim();
}
});

return attributes;
};

最佳答案

您可以尝试使用下面的正则表达式分别捕获键值对

\s*(\S+)\s*:\s*([^;\s]*(?:\s*\w+))

DEMO

关于javascript - 分割键 : value; pairs and exclude whitespace in matches,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24588120/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com