我正在尝试整合一个包含任意数量的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',
};
为什么会抛出此错误,如何在将它们存储在单独的变量之外来连接这些值?
答案 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模板文字。