Express 将路由器4/path响应到regexp多个可选段

Express 将路由器4/path响应到regexp多个可选段,express,react-router-v4,Express,React Router V4,在React路由器3中,我可以有如下路径: /root(/id/:id)(/di/:di) 那会匹配的 /root /root/id/1 /root/di/2 /root/id/1/di/2 太好了 我想不出在第四台路由器里怎么做。所有的例子都只做了一件事 使用我可以想出一条像这样的路线 /root/id/:id?/di/:di? 但那只会相配 /root/id/1/di/2 有解决方案吗?在react router v4中,您可以将正则表达式封装在其中。因此,这个正则表达式应该工作并匹

在React路由器3中,我可以有如下路径:

/root(/id/:id)(/di/:di)
那会匹配的

/root
/root/id/1
/root/di/2
/root/id/1/di/2
太好了

我想不出在第四台路由器里怎么做。所有的例子都只做了一件事

使用我可以想出一条像这样的路线

/root/id/:id?/di/:di?
但那只会相配

/root/id/1/di/2

有解决方案吗?

在react router v4中,您可以将正则表达式封装在其中。因此,这个正则表达式应该工作并匹配您给出的所有路径:/root/id/|/di/:id*/id/|/di/?:di*。在您提供链接的Express router Tester工具中,密钥不会显示在这个正则表达式中,但它确实可以工作,我在localhost上进行了测试,密钥工作正常


注意,我没有使用?在第一次捕获组后,即/id/|/di/因为如果我这样做了,它将成为可选的,然后像/root/12这样的路径也将被匹配。

下面是我最后是如何做到的,这有点可笑,但它是有效的:

  <Route
    path="/root/:firstKey?/:firstId?/:secondKey?/:secondId?"
    render={({ match: { params: { firstKey, secondKey, firstId, secondId } } }) => {
      const params = { [firstKey]: firstId, [secondKey]: secondId }
      return (<Whatever {...params} />)
    }}
  />

你能详细说明一下这是怎么回事吗?我需要转换此路径实体/:contextId/:contextRelType/active/:activeId/:activeRelType@SergeyOrlovReactRouter v4使用指向regexp的路径来匹配路径,您可以查看与之相关的示例。我的示例的目的是匹配原始问题中给出的所有案例。括号内的URL部分基本上是regex,例如这个模式/hey/jerry |/tom将匹配两个路径/hey/tom和/hey/jerry,而?在它使之成为可选之后。