Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.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 Regex检索括号之间的两个变量_Javascript_Regex_Object - Fatal编程技术网

Javascript Regex检索括号之间的两个变量

Javascript Regex检索括号之间的两个变量,javascript,regex,object,Javascript,Regex,Object,我试图在两个双括号中检索两个变量。到目前为止,我有: var regex = /\[\[\s([a-z]+):*\s*([\d])*\s\]\]/g; var obj = {}; var text = '[[ dogs: 1 ]] [[ dogs: 2 ]] [[ cats: 1 ]]'; var module = text.replace(regex, function (match, key, value) { obj[key] = value; console.log(ob

我试图在两个双括号中检索两个变量。到目前为止,我有:

var regex = /\[\[\s([a-z]+):*\s*([\d])*\s\]\]/g;
var obj = {};
var text = '[[ dogs: 1 ]] [[ dogs: 2 ]] [[ cats: 1 ]]';
var module = text.replace(regex, function (match, key, value) {
    obj[key] = value;
    console.log(obj);
});
结果是:

Object {dogs: "2", cats: "1"}
我想要的是:

Object {dogs: "1", dogs: "2", cats: "1"}

就我个人而言,我无法理解为什么狗只显示第二个id。

这是因为对象不能包含具有相同密钥的多个项目。第二次设置
dogs
时,它将覆盖第一个实例

一些替代解决方案包括创建对象数组:

var regex = /\[\[\s([a-z]+):*\s*([\d])*\s\]\]/g;
var arr = [];
var text = '[[ dogs: 1 ]] [[ dogs: 2 ]] [[ cats: 1 ]]';
var module = text.replace(regex, function (match, key, value) {
    var obj = {};
    obj[key] = value;
    arr.push(obj);
    console.log(arr);
});
或者使用创建数组对象:

var regex = /\[\[\s([a-z]+):*\s*([\d])*\s\]\]/g;
var obj = {};
var text = '[[ dogs: 1 ]] [[ dogs: 2 ]] [[ cats: 1 ]]';
var module = text.replace(regex, function (match, key, value) {
    if (obj[key]) {
        obj[key].push(value);
    } else {
        obj[key] = [value];
    }
    console.log(obj);
});

您的bug不在正则表达式中,而是在对象中

不能有具有两个相同关键点的对象

我建议您将数据放入数组中,并在需要时进行迭代:

var regex = /\[\[\s([a-z]+):*\s*([\d])*\s\]\]/g;
var arr = [];
var text = '[[ dogs: 1 ]] [[ dogs: 2 ]] [[ cats: 1 ]]';
var module = text.replace(regex, function (match, key, value) {
    var obj = {}
    obj[key] = value;
    arr.push(obj);
});
console.log(arr); // [{dogs:1},{dogs:2},{cats:1}]

由于不能有多个同名属性,我的建议是使用数组存储不同的值,如下所示

导致

{
  cats: ["1"],
  dogs: ["1", "2"]
}

为什么要为一个属性指定两个不同的值…?您正在覆盖键。尝试使用数组而不是对象。尝试在JavaScript控制台中输入
({dogs:“1”、dogs:“2”、cats:“1”})
。除了覆盖键的值之外,正则表达式也有问题。到目前为止,还没有人发现它。
{
  cats: ["1"],
  dogs: ["1", "2"]
}