【问题标题】:Vue Routing and Regex PatternsVue 路由和正则表达式模式
【发布时间】:2020-09-25 07:42:27
【问题描述】:

我正在使用 Vue,最近引入了一个带参数的路由。

const routes = [
  {
    path: "/:lang(^$|^es$|^pt$|^cn$)",
    name: "Home",
    component: Page,
  },
  {
    path: "/privacy",
    name: "Privacy",
    component: Privacy,
  },
  {
    path: "*",
    name: "NotFound",
    component: NotFound,
  }
];

我希望在满足以下条件之一时触发路由。

  1. lang 为
  2. lang 是 esptcn,但不能是它们的组合。

其他一切都应该去NotFound路线

我上面使用的正则表达式适用于https://regexplanet.com的javascript引擎

我尝试了各种变体以使其在 Vue 中工作,但到目前为止无济于事。

【问题讨论】:

    标签: javascript vue.js vue-router


    【解决方案1】:

    我相信你需要的路径是:

    path: "/:lang(|es|pt|cn)",
    

    这里有一个路由测试器,它使用与 Vue 相同的库:

    https://forbeslindesay.github.io/express-route-tester/

    确保您正在针对 path-to-regexp 0.1.7 进行测试。

    问题是整个路径都被转换为正则表达式,而不仅仅是括号中的位。所以你的^ 永远不会匹配任何东西。尝试将您的原始路径放入测试工具中,看看它是如何编译的。生成的正则表达式已经包含了自己的^$,但它们是相对于整个路径的,而不仅仅是你要匹配的参数。

    【讨论】:

    • 嗨skitlele,这绝对是一个开始它不允许参数为空强硬。 path: "/:lang(es|pt|cn)?" 是我现在正在使用的 - 在末尾添加 ? 使其成为可选的。我不知道正则表达式和 ? 可以结合使用。
    • @NorbertHüthmayr 我建议的路径应该允许一个空值。我自己在一个 Vue 应用程序中尝试过,它似乎工作正常。注意es 之前的|
    猜你喜欢
    • 2012-06-28
    • 2015-10-23
    • 1970-01-01
    • 2018-12-20
    • 2020-10-10
    • 2019-01-01
    • 2014-04-14
    • 2012-09-23
    相关资源
    最近更新 更多