我有一个问题想用正则表达式解决,或者任何其他方法(如果有更好的方法)。我尝试了多种方法来实现目标,但没有任何效果。
我有一个带有端点的数组:
const endpoints = [
{
id: 1,
url: "/api/items/:itemId"
},
{
id: 2,
url: "/api/users/:userName/delete"
},
{
id: 3,
url: "/api/users/:userName/edit"
}
];
以及请求 URL:
const url = "/api/users/max/edit";
现在我想要的是一个像这样的函数:
const rewrite = (url, endpoints) => {
// What is the best way to achieve the following return value:
return {
endpointId: 3,
values: {
userName: "max"
}
};
};
说明:该函数应该找到 url 的适当端点。端点 url 中以冒号开头的所有部分都不是静态的,而是应该替换为请求 url 中的值。在这种情况下,:userName
应替换为 max
。
我从事 Web 开发已经有一段时间了,但说实话,我几乎不知道如何解决这样的问题。
最佳答案
const rewrite = (url, endpoints) => {
var doubledArray = Array.prototype.map.call(endpoints, function(el) {
return {
id: el.id,
url: el.url.split('/')
};
});
var parts = url.split('/');
var i = 0;
parts.forEach(function(element) {
doubledArray = doubledArray.filter(el => (element == el.url[i] || el.url[i].startsWith(':')));
i++;
});
return {
endpointId: doubledArray[0].id,
values: {
[`${doubledArray[0].url.filter(el => el.startsWith(':'))[0].substring(1)}`]: parts[doubledArray[0].url.findIndex(function (el) { return el.startsWith(':'); } )],
}
};
};
关于javascript - 将字符串与多种模式之一进行匹配并提取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54467253/