用正则表达式

时间:2015-12-07 08:21:35

标签: javascript regex

我想替换":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;?

3 个答案:

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

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