如何在所有可能的选项中拆分 Svelte 路由器中的 slug?

How to split slugs in Svelte router in all possible options?

我想构建 URL 模式,像这样 [lang]/category/[name]-[suffix],其中:

为了实现它,我决定使用 Matching:

export function match(param) {
  let result = /^(super-product|great-gadget|ta-ta-ta)/.test(param); 
  return a;
}

对于 URL /en/category/a-bb-ccc-super-product/parambb-ccc-super-product。 问:如何在所有可能的选项中将 Svelte 拆分 URL 成 slug,例如:a + bb-ccc-super-product, a-bb + ccc-super-product, ..., a-bb-ccc-super + product,而不只是一个 a + bb-ccc-super-product?

此外,我尝试使用 handlers 来解决这个问题,但失败了,因为我无法更改 URL。

简短的回答,你不能。 Svelte 将像 non-greedy 正则表达式匹配器一样进行匹配,因此在 [name]-[suffix] 的情况下,name 将始终保留 之前出现的第一个匹配连字符(-) 和 suffix 将保留第一个匹配连字符的任何路径。

作为参考,引用 SvelteKit 文档(相关位加粗):

A route can have multiple dynamic parameters, for example src/routes/[category]/[item].svelte or even src/routes/[category]-[item].svelte. (Parameters are 'non-greedy'; in an ambiguous case like x-y-z, category would be x and item would be y-z.)

更简单的解决方案是选择不同的参数分隔符,例如下划线 (_),或 double-hyphen (--),或任何您想要的字符序列肯定不会出现在 您的参数中。

或者,如果您绝对想要或需要坚持您当前的命名方案,将其视为单个参数 (name) 然后解析此 会更容易single 使用您自己的正则表达式给自己设置参数(正如您尝试的那样,但错误地继续使用 2 个参数)。