2014-12-03 57 views
2

我试图检索两个双括号之间的两个变量。到目前为止,我有这样的:正则表达式检索括号内的两个变量

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。

+0

为什么要将两个不同的值分配给一个属性......? – ElDoRado1239 2014-12-03 17:24:31

+0

您正在覆盖密钥。尝试使用数组而不是对象。 – Jonnerz 2014-12-03 17:25:58

+3

尝试在JavaScript控制台中输入'({dogs:“1”,dogs:“2”,cats:“1”})''。 – 2014-12-03 17:26:38

回答

5

这是因为对象不能包含具有相同键的多个项目。当您第二次设置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); 
}); 
4

你的错误是不是内部的正则表达式是在对象内部。

你不能有一个对象有两个相同的键。

我建议你把你的数据放入数组,当你需要它遍历:

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}] 
+0

就是这样!谢谢! – Robert 2014-12-03 17:27:30

2

既然你不能有多个同名的属性我的建议是,你使用一个数组来存储不同的值,比如这个;

http://jsbin.com/qiqacifata/1/edit?js,console

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] = []; 
    } 
    obj[key].push(value); 

}); 

console.log(obj); 

结果;

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