在React Router路由路径道具中使用正则表达式

时间:2018-08-22 13:02:58

标签: javascript regex reactjs react-router

我正在使用正则表达式而不是react-router path prop中的字符串将页面路由到404

我所拥有的是以下格式的不同路线的列表:

示例定义

route1

const withdrawRuote = 'user/:userId/withdraw'
const depositRoute = 'user/:userId/deposit'

route2

const groupNewRoute = 'group/new'
const groupWithdrawRoute = 'group/withdraw'
const groupDepositRoute = 'group/deposit'

反应路由器路由路径正则表达式

对于Route1

Route(exact path=myRegex1 render=404)

这是myRegex1

使用上述正则表达式,应通过以下操作:

  • / user / 123 / withdrawaaaaa
  • / user / 123 / depositaaaaaa

应该失败

  • / user / 123 / withdraw
  • / user / 123 / deposit /
  • / user / 123 / withdraw
  • / user / 123 / deposit /
  • /用户
  • /用户/

对于Route2

Route(exact path=myRegex2 render=404)

这里是myRegex2。 这些应该通过:

  • / group / not / found
  • / group / not

应该失败

  • / group /
  • /组
  • / group / deposit
  • / group / withdraw

我知道我可以使用switch语句处理404,但是我需要知道为什么这不起作用。

我如何使正则表达式知道我需要单词depositwithdrawuser作为单词,并且考虑到我要排除它们而不是包括它们而不仅仅是一组字符。

1 个答案:

答案 0 :(得分:2)

您需要告诉正则表达式引擎,您只想避免在结尾处匹配SELECT (CASE WHEN col1 <= 0 THEN 'Crash' ELSE 'Hold' END) AS Action FROM vdk WHERE t_stamp Between "{StartTime}" AND "{EndTime}" withdraw的URL:

deposit

请参见regex demo

匹配后^\/user\/?[0-9]+\/(?!(?:deposit|withdraw)\/?$).*$ ^^^^ 的否定超前查询将失败(直接在当前位置的右侧):

  • (?!(?:deposit|withdraw)\/?$)-两个值(?:deposit|withdraw)deposit
  • withdraw-一个或零个(可选)\/?个字符
  • /-字符串的结尾。