2011-01-31 21 views
3

說我有一個字符串,如:解析值超出paramaterized字符串在javascript

var map = "/directory/:id/thumbnails/:size"; 

而且我想用它來映射對另一個字符串(實際上,同樣的事情,Rails使用來定義路由),如:

var str = "/directory/10/thumbnails/large"; 

我想「比較」這兩個字符串,返回一個代表的str映射到map,這在我的例子上面的零件一個鍵值對或JSON對象,看起來像:

obj = { 
    'id' : '10', 
    'size' : 'large' 
} 

這是否適合JavaScript Regex?誰能幫我?

+0

有沒有很好的理由使用JavaScript來代替服務器端語言? – yoda

+0

我實際上並沒有將它用於路由,這只是最方便的例子,因爲這是每個人都可能熟悉的。 –

+0

是的,這是可能的。您可以使用正則表達式將映射轉換爲正則表達式,然後使用該正則表達式解析相關字符串。 –

回答

2

我發現它更容易只寫代碼,這不是解釋:)

var map = "/directory/:id/thumbnails/:size"; 
var str = "/directory/10/thumbnails/large"; 

var obj = {}; 

var mapArr = map.split('/'); 
var strArr = str.split('/'); 

if (mapArr.length != strArr.length) return false; 

for (var i = 0; i < mapArr.length; i++) 
{ 
    var m = mapArr[i]; 
    var s = strArr[i]; 

    if (m.indexOf(":") != 0) continue; 

    m = m.substring(1);  
    obj[m] = s; 
    document.write(m + " = "); 
    document.write(obj[m]); 
    document.write("<br/>"); 
} 

你也可以看到它在這裏的行動=>http://jsfiddle.net/5qFkb/

可能會問,如果你有任何問題,但代碼應該是不言自明的。另外請注意,沒有通常的空檢查和我通常會加入的東西 - 這只是一個快速和骯髒的概念證明。

哦,萬一從我的回答中不清楚,不,我不會使用正則表達式,因爲那樣我會遇到兩個問題而不是一個問題。