我想替换":id"在具有特定id的url字符串中,例如54我的问题是否足以使用" /(:id)/ i"替换这个参数,或者我应该使用更复杂的东西?感谢
var url = "http://www.test.com/api/person/:id/details"
var str = url.replace(/(:id)/i, 54);

更新:
我刚刚意识到拥有一个可以替换URL中多个值的函数会很棒。例如:
function replaceParametersInUrl(url, params) {
var regex = new RegExp(Object.keys(params).join('|'), 'gi');
return url.replace(regex, function(matched) {
return params[matched];
});
}
console.log(replaceParametersInUrl("api/person/:userId/items/:itemId", {userId: 56, itemId: 1}));
此解决方案的问题在于它仅替换userId和itemId字符串而不使用":#34;。如何实现它将取代那些字符串,包括":#34;?
答案 0 :(得分:1)
在"正常"它应该足够了。用户可以键入:id
或:Id
,但您已经使用了incasesensitive标志,因此它应该没问题。
但是你应该知道它是否足够。也许在您的应用程序中有一个案例,在您想要替换的那个之前有:id
。比你上面给出的RegExp有问题。
答案 1 :(得分:1)
您提供的代码可以正常使用。此外,添加到您的代码,大括号不在这里(:id)
。此外,如果URL中的任何位置:id
,您的正则表达式将失败(尽管不是预期的,但开发人员应该注意)。
修改后的代码:
var url = "http://www.test.com/api/person/:id/details";
var str = url.replace(/\/:id\//i, '/54/');
答案 2 :(得分:1)
我写了这个函数来解决我在更新的问题中提到的问题:
function replaceParametersInUrl(url, params) {
var newObj = {};
Object.keys(params).forEach(function(key) {
newObj[':'+key] = params[key];
});
var regex = new RegExp(Object.keys(newObj).join('|'), 'gi');
return url.replace(regex, function(matched) {
return newObj[matched];
});
}
console.log(replaceParametersInUrl("api/person/:userId/items/:itemId", {userId: 56, itemId: 1}));
我可以使用":"对象键中的字符?