如何基于JSON属性名替换字符串值

Kha*_*meh 2 javascript regex string

我试图用对象中可比较的jSON属性替换字符串中的值.

var value = "/sessions/:sessionId/events/:id";
var result = replace(value, { sessionId : 1 , id : 23 });

// result : "/sessions/1/events/23"
console.log(result);
Run Code Online (Sandbox Code Playgroud)

是否可以使用JavaScript(我确定是)?不确定最有效的方法,以及当模板字符串中的所有值都不匹配时如何处理它.

提前致谢.

更新(解决方案)

var url = function (template, parameters) {

    var extra = [];

    for (param in parameters) {
        if (value.indexOf(param) < 0) {
            extra.push(param + '=' + parameters[param]);
        }
    }

    var result = template.replace(/:(\w+)/g, function (substring, match) {
        var routeValue = parameters[match];
        if (!routeValue) {
            throw "missing route value for " + match + ' in "' + template +'"';
        }
        return routeValue;
    });

    if (result.indexOf("/:") > 0) {
        throw "not all route values were matched";
    }

    return (extra.length === 0) ? result : result + "?" + extra.join("&");
};

var value = "/sessions/:sessionId/events/:id";
var data = {
    sessionId: 1,
    id: 23,
    term: "butter"
};

// result : /sessions/1/events/21?term=butter
console.log(url(value, data));
Run Code Online (Sandbox Code Playgroud)

Roc*_*mat 6

一个正则表达式在这里工作得很好.

var value = "/sessions/:sessionId/events/:id";
var obj = { sessionId : 1 , id : 23 };

var result = value.replace(/:(\w+)(\/|\b)/g, function(substring, match, nextMatch){
    return obj[match] + nextMatch;
});
Run Code Online (Sandbox Code Playgroud)