javascript - 将字符串与多种模式之一进行匹配并提取数据

标签 javascript regex url url-routing

我有一个问题想用正则表达式解决,或者任何其他方法(如果有更好的方法)。我尝试了多种方法来实现目标,但没有任何效果。

我有一个带有端点的数组:

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/

相关文章:

c# - 如何从 Web 服务方法代码中获取 WS URL

c# - 获取 url 的主要部分,包括虚拟目录

javascript - 为什么 jQuery append() 会删除字符串中第一个空格后的单词

javascript - Jquery UI 模态对话框,将焦点设置在第一个表单元素上

regex - 如何使用正则表达式对反斜杠和 ''进行转义和不转义?

c# - C# 中电子邮件验证的最佳正则表达式

javascript - jquery 认证

javascript - jQuery 计算项目在可滚动窗口中的位置并滚动到它

javascript - 字符串中多次出现

java - GWT Java URL validator