2016-11-17 33 views
0

我試圖將包含任意數量的slug和鍵值的正則表達式路由器放在一起。在javascript對象定義中連接字符串

我這樣做是通過創建模式的對象及其各自的模塊,然後將正則表達式匹配到模塊。

但是,當我使用「+」運算符連接對象定義中的字符串時,JavaScript會引發錯誤。

// URI PATTERNS 
var SLUG ='\/[a-z|A-Z|0-9|-]+)([\/]{0,1})?'; 
var KEYS ='\/?(\?.*)?$/'; 

// ROUTES 
var routes = { 

    '\/public\/images' + KEYS    : 'images', /* <-- ERROR: '+' Unexpected token */ 
    '\/public\/other' + SLUG + KEYS : 'something-else', 

}; 

爲什麼這個錯誤被拋出,我怎麼可以連接它們存儲在獨立的變量之外的這些價值?

+0

對象必須具有**屬性名稱**和分配給它的值。您可以通過其屬性訪問對象中的值。這就是你所缺少的 –

+0

屬性名稱應該是串聯的字符串,值將是模塊(圖像等) – yevg

+1

哦,你..我忽略了它。你只需要使用'[]'來添加屬性值。就像只有一個像'routes = {}'這樣的路由普通對象,那麼你可以做'routes [your concatenation logic] ='images';' –

回答

2

// URI PATTERNS 
 
var SLUG = '\/[a-z|A-Z|0-9|-]+)([\/]{0,1})?'; 
 
var KEYS = '\/?(\?.*)?$/'; 
 

 
// ROUTES 
 
var routes = {}; 
 

 
function addRoute(keyParts, value){ 
 
    routes[keyParts.join('')] = value; 
 
} 
 

 
addRoute(['\/public\/images', KEYS], 'images'); 
 
addRoute(['\/public\/other', SLUG, KEYS], 'something-else'); 
 

 
console.log(routes);

+0

使用join()函數。謝謝! – yevg

1

這個怎麼樣的解決方案。希望能幫助到你!

var SLUG ='\/[a-z|A-Z|0-9|-]+)([\/]{0,1})?'; 
 
var KEYS ='\/?(\?.*)?$/'; 
 

 
function obj(){ 
 
    obj=new Object(); 
 
    this.add=function(key,value){ 
 
     obj[key]=value; 
 
    } 
 
    this.obj=obj 
 
} 
 

 
routes=new obj(); 
 
routes.add(['\/public\/images'+ KEYS], 'images'); 
 
routes.add(['\/public\/other' + SLUG + KEYS],'something-else'); 
 

 
console.log(routes.obj);

+0

做「+」+「+」的原因是什麼?爲什麼你在構造函數中創建一個新的對象時,你可以說'this.add = function(key,value){this [key] = value; }'? – 2016-11-17 03:49:13

0

使用計算屬性名稱:

var routes = { 
    [`\/public\/images${KEYS}`]: 'images', 

上面還使用ES6模板文字。