在javascript对象定义中连接字符串

时间:2016-11-17 02:28:06

标签: javascript arrays regex object

我正在尝试整合一个包含任意数量的slugs和键值的正则表达式路由器。

我这样做是通过创建模式对象及其各自的模块,然后将正则表达式与模块匹配。

但是,当我使用“+”运算符连接对象定义中的字符串时,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',

};

为什么会抛出此错误,如何在将它们存储在单独的变量之外来连接这些值?

3 个答案:

答案 0 :(得分: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);

答案 1 :(得分: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);

答案 2 :(得分:0)

使用计算属性名称:

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

以上也使用ES6模板文字。