将 URL 中的参数替换为正则表达式

Replacing parameter in URL with regex

本文关键字:替换 正则表达式 参数 URL      更新时间:2023-09-26

我想用特定的id替换url字符串中的":id",例如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 字符串,而不替换 ":"。我如何实现它将替换包括":"在内的字符串?

在"正常"情况下,这应该就足够了。用户可以键入它:id:Id但你已经使用了区分大小写的标志,所以它应该没问题。

但你应该知道它是否足够。也许您的应用程序中存在一种情况,即在要替换的:id之前有一个。比你对上面给出的正则表达式有问题。

您提供的代码可以正常工作。此外,添加到您的代码中,这里不需要大括号(:id).此外,如果 URL 中的任何位置有:id,您的正则表达式将失败(虽然不是预期的,但开发人员应该小心(。

修改后的代码:

var url = "http://www.test.com/api/person/:id/details";
var str = url.replace(/'/:id'//i, '/54/');

我写这个函数是为了解决我在更新的问题中提到的问题:

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}));

我可以在对象键中使用":"字符吗?