我想构建 URL 模式,如下所示[lang]/category/[name]-[suffix],其中:
suffix是几个字符串之一,例如:['super-product', 'great-gadget', 'ta-ta-ta']name是一个多词slug,比如a-bb-ccc为了实现它,我决定使用Matching:
export function match(param) {
let result = /^(super-product|great-gadget|ta-ta-ta)/.test(param);
return a;
}
Run Code Online (Sandbox Code Playgroud)
对于 URL 来说/en/category/a-bb-ccc-super-product/,param是bb-ccc-super-product。问:如何让 Svelte 将 URL 拆分为所有可能的选项中的 slugs,例如:a+ bb-ccc-super-product、a-bb+ ccc-super-product、 ...、a-bb-ccc-super+ product,而不仅仅是一个a+bb-ccc-super-product?
另外,我尝试使用处理程序来解决此问题,但失败了,因为我无法更改 URL。
简短的回答,你不能。Svelte 将像非贪婪正则表达式匹配器一样进行匹配,因此在您的情况下[name]-[suffix],name将始终保留第一个匹配连字符 ( )之前出现的所有内容,并将保留第一个匹配连字符的所有踪迹。-suffix
作为参考,引用 SvelteKit 文档(相关位加粗):
一条路线可以有多个动态参数,例如 src/routes/[category]/[item].svelte 甚至 src/routes/[category]-[item].svelte。(参数是“非贪婪的”;在像 xyz 这样不明确的情况下,类别将是 x,项目将是 yz。)
更简单的解决方案是选择不同的参数分隔符_,例如下划线 ( ) 或双连字符 ( --),或者您确定的任何字符序列都不会出现在参数中。
或者,如果您绝对想要或需要坚持使用当前的命名方案,则将其视为单个参数 ( ) 会更容易,name然后使用您自己的正则表达式自己解析此单个参数(正如您所尝试的那样,但是错误地保留使用 2 个参数)。
| 归档时间: |
|
| 查看次数: |
1397 次 |
| 最近记录: |