将 URL 中的参数替换为正则表达式
Replacing parameter in URL with regex
我想用特定的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}));
我可以在对象键中使用":"字符吗?
相关文章:
- 如何用正则表达式替换特定的JavaScript注释
- 如何在单个正则表达式中替换多个值
- 用特定的javascript正则表达式替换每个单词
- 字符串替换正则表达式,开头为空格
- 用Javascript实时替换正则表达式
- 用 javascript 替换正则表达式中的部分文本
- JavaScript 替换正则表达式而不是全局
- 字符串替换正则表达式不起作用
- JavaScript - 替换/正则表达式以格式化论坛中的引号
- Javascript替换-正则表达式
- 用Javascript替换正则表达式转义$to$
- JS替换正则表达式,但在输出中使用部分表达式,如变量
- Javascript替换正则表达式不按预期工作
- 如何在Javascript中忽略/允许多个换行符替换正则表达式
- 传递变量来替换正则表达式函数
- 字符串用正则表达式替换正则表达式字符类
- 如何用匹配长度的$ string替换正则表达式匹配
- 用提示/回调UI替换正则表达式
- UltraEdit查找并替换正则表达式
- 无法用javascript替换正则表达式