2014-12-03 81 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"] 
}