2016-11-17 28 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模板文字。