Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 用正则表达式替换URL中的参数_Javascript_Regex - Fatal编程技术网

Javascript 用正则表达式替换URL中的参数

Javascript 用正则表达式替换URL中的参数,javascript,regex,Javascript,Regex,我想用特定id替换url字符串中的“:id”,例如54我的问题是,使用“/(:id)/I”替换此参数是否足够,还是应该使用更复杂的参数?谢谢 var url=”http://www.test.com/api/person/:id/details" var str=url.replace(/(:id)/i,54)在“正常”情况下,它应该足够了。用户可以键入它:id或:id,但您已经使用了incasesensitive标志,因此应该可以 但你应该知道这是否足够。在您的应用程序中,可能存在这样一种情

我想用特定id替换url字符串中的“:id”,例如54我的问题是,使用“/(:id)/I”替换此参数是否足够,还是应该使用更复杂的参数?谢谢

var url=”http://www.test.com/api/person/:id/details"
var str=url.replace(/(:id)/i,54)在“正常”情况下,它应该足够了。用户可以键入它
:id
:id
,但您已经使用了incasesensitive标志,因此应该可以


但你应该知道这是否足够。在您的应用程序中,可能存在这样一种情况:在要替换的id之前有一个
:id
。如果您对上面给出的RegExp有问题。

您提供的代码可以正常工作。此外,添加到代码中,此处不需要大括号
(: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}));

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

您拥有的字符应该足够了。您也可以去掉括号,因为在这种情况下,您不需要括号提供的内容。因此,
/:id/
就足够了。