Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript将字符串拆分为数组字典(key->;value)(regex)_Javascript_Regex_Dictionary_Pattern Matching - Fatal编程技术网

Javascript将字符串拆分为数组字典(key->;value)(regex)

Javascript将字符串拆分为数组字典(key->;value)(regex),javascript,regex,dictionary,pattern-matching,Javascript,Regex,Dictionary,Pattern Matching,目的是在javascript中将字符串解析到数组字典中 例如,这可能是需要解析的字符串 “k=23:3/24:32b=43:532:45/3:3253” 我想把这个字符串变成这样的字典(键值) k-23:3/24:32 b-43:532:45/3:3253 我最初的想法是搜索[a-Z]\*.*并使用正则表达式将其拆分为匹配项 然而,我不认为这会起作用,因为这也会带来b,这不是我想要的。而且,我无法让它工作(我是新的正则表达式) equals将仅在键和变量之间(决不在值中)。密钥也将永远只有

目的是在javascript中将字符串解析到数组字典中

例如,这可能是需要解析的字符串

“k=23:3/24:32b=43:532:45/3:3253”


我想把这个字符串变成这样的字典(键值)

k-23:3/24:32

b-43:532:45/3:3253


我最初的想法是搜索[a-Z]\*.*并使用正则表达式将其拆分为匹配项

然而,我不认为这会起作用,因为这也会带来b,这不是我想要的。而且,我无法让它工作(我是新的正则表达式)


equals将仅在键和变量之间(决不在值中)。密钥也将永远只有一个字符,而不是一个单词

var test = "k=23:3/24:32b=43:532:45/3:3253";
var r = /(.*)([a-Z])(//*)(*.)/

上面是我的想法,但我似乎无法让任何东西起作用。

可能使用
/.=[^=]+(?!=)/g
匹配键值对,而不进一步了解键值可能包含哪些字符:

  • 此处
    =
    匹配等号前面的键(单个字符)
  • [^=]+(?!=)
    匹配所有非
    =
    字符,直到下一个等号之前的一个字符(使用负前瞻限制贪婪匹配)或字符串结尾
var test=“k=23:3/24:32b=43:532:45/3:3253”;
var result={}
test.match(/。=[^=]+(?!=)/g).forEach(
m=>{
var[k,v]=m.split('='))
结果[k]=v
}
)

console.log(result)
可能使用
/.=[^=]+(?!=)/g
匹配键值对,而无需进一步了解键值可以使用哪些字符:

  • 此处
    =
    匹配等号前面的键(单个字符)
  • [^=]+(?!=)
    匹配所有非
    =
    字符,直到下一个等号之前的一个字符(使用负前瞻限制贪婪匹配)或字符串结尾
var test=“k=23:3/24:32b=43:532:45/3:3253”;
var result={}
test.match(/。=[^=]+(?!=)/g).forEach(
m=>{
var[k,v]=m.split('='))
结果[k]=v
}
)

console.log(result)
由于标识符只有一个字符,并且
=
是标识符结束和值开始的地方,因此只需使用类似以下的正则表达式即可:

var r = /.=.+?(?=(.=)|$)/g;
这意味着:

.          : a character
=          : followed by =
.+?        : followed by a bunch of characters (the ? means non-greedy mode: match as few as possible so that it won't consume from other variables)
(?=(.=)|$) : positive look-ahead, means that the above should be followed either by another .= (a character that is followed by =) or the end of the string
然后,您可以通过对每个匹配进行
split
ing以获得键值对,从而
reduce
匹配以获得所需的对象:

var obj = test.match(r).reduce(function(obj, match) {
    var keyValue = match.split("=");
    obj[keyValue[0]] = keyValue[1];
    return obj;
}, {});
示例:

var test=“k=23:3/24:32b=43:532:45/3:3253”;
var r=/.=.+(?=(.=)|$)/g;
var obj=test.match(r).reduce(函数(obj,match){
var keyValue=match.split(“”);
obj[keyValue[0]]=keyValue[1];
返回obj;
}, {});

控制台日志(obj)由于标识符只有一个字符,
=
是标识符结束和值开始的地方,因此只需使用类似以下的正则表达式即可:

var r = /.=.+?(?=(.=)|$)/g;
这意味着:

.          : a character
=          : followed by =
.+?        : followed by a bunch of characters (the ? means non-greedy mode: match as few as possible so that it won't consume from other variables)
(?=(.=)|$) : positive look-ahead, means that the above should be followed either by another .= (a character that is followed by =) or the end of the string
然后,您可以通过对每个匹配进行
split
ing以获得键值对,从而
reduce
匹配以获得所需的对象:

var obj = test.match(r).reduce(function(obj, match) {
    var keyValue = match.split("=");
    obj[keyValue[0]] = keyValue[1];
    return obj;
}, {});
示例:

var test=“k=23:3/24:32b=43:532:45/3:3253”;
var r=/.=.+(?=(.=)|$)/g;
var obj=test.match(r).reduce(函数(obj,match){
var keyValue=match.split(“”);
obj[keyValue[0]]=keyValue[1];
返回obj;
}, {});

控制台日志(obj)如果值的格式也定义得很好,则可以生成更干净的正则表达式。看起来值总是
(数字):(数字)/(数字):(数字)
——是这样吗?如果值的格式也定义得很好,则可以生成更干净的正则表达式。看起来值总是
(数字):(数字)/(数字):(数字)
--是这样吗?您的意思是您有
*
作为键值对的分隔符吗?如果是这种情况,请尝试
/.\*[^*]+(?!\*)/g
,注意您需要转义
*
,因为它是正则表达式中的量词。您的意思是将
*
作为键值对的分隔符吗?如果是这种情况,请尝试
/.\*[^*]+(?!\*)/g
,注意您需要转义
*
,因为它是正则表达式中的量词。