如何在所有可能的选项中拆分 Svelte 路由器中的 slug?
How to split slugs in Svelte router in all possible options?
我想构建 URL 模式,像这样 [lang]/category/[name]-[suffix]
,其中:
suffix
是几个字符串之一,例如:['super-product', 'great-gadget', 'ta-ta-ta']
name
是一个多词段,例如 a-bb-ccc
为了实现它,我决定使用 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/
,param
是 bb-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。
- "@sveltejs/kit": "1.0.0-next.310"
- “苗条”:“3.47.0”
简短的回答,你不能。 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 个参数)。
我想构建 URL 模式,像这样 [lang]/category/[name]-[suffix]
,其中:
suffix
是几个字符串之一,例如:['super-product', 'great-gadget', 'ta-ta-ta']
name
是一个多词段,例如a-bb-ccc
为了实现它,我决定使用 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/
,param
是 bb-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。
- "@sveltejs/kit": "1.0.0-next.310"
- “苗条”:“3.47.0”
简短的回答,你不能。 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 个参数)。