我希望能够匹配以下任何一项:
unitedstatesofamerica
united-states-of-america
匹配有或没有短划线的字符,允许其中任何一个。
这样做的目的是让我可以让uris进入我的路由器来匹配。
例如我想允许a-z的灵活性并允许任何单词分开,因为我们可能允许调用者发送seo友好的值
/countries/united-states-of-america
/countries/unitedstatesofamerica
/countries/germany
/countries/stlucia
/countries/st-lucia
等
我正在使用koa-controller并尝试提出正则表达式路由以允许此操作。据我所知,我认为koa-controller使用中间件path-to-regexp
对于不了解的人,我所要问的并不清楚。我只是尝试为我的koa控制器路由创建一个带正则表达式的路由,这将允许调用者发送允许名称的URL,而名称可能有破折号。
这是我没有运气的尝试。我要么没有正确使用正则表达式,要么语法正确,以及如何将正则表达式添加到koa-route或同时出错?我不知道哪个:
'/countries/:countryUrlFriendlyName(/^[a-z-]+$/i)/states/:stateUrlFriendlyName(/^[a-z-]+$/i)/cities/:cityUrlFriendlyName(/^[a-z-]+$/i)': {to: 'city#findByCountryAndStateAndCityUrlFriendlyName'}
'/countries/:(/^[a-z-]+$/i)/states/:(/^[a-z-]+$/i)/cities/:(/^[a-z-]+$/i)': {to: 'city#findByCountryAndStateAndCityUrlFriendlyName'}
'/countries/(/^[a-z-]+$/i)/states/(/^[a-z-]+$/i)/cities/(/^[a-z-]+$/i)': {to: 'city#findByCountryAndStateAndCityUrlFriendlyName'},
'/countries/:countryUrlFriendlyName\/^[a-z-]+$/i\/states/:stateUrlFriendlyName\/^[a-z-]+$/i\/cities/:cityUrlFriendlyName\/^[a-z-]+$/i': {to: 'city#findByCountryAndStateAndCityUrlFriendlyName'},
'/countries/:countryUrlFriendlyName/^[a-z-?]+$/i/states/:stateUrlFriendlyName/^[a-z-?]+$/i/cities/:cityUrlFriendlyName/^[a-z-?]+$/i': {to: 'city#findByCountryAndStateAndCityUrlFriendlyName'},
'/countries/:countryUrlFriendlyName(/^[a-z-?]+$/i)\/states/:stateUrlFriendlyName(/^[a-z-?]+$/i)/cities/:cityUrlFriendlyName(/^[a-z-?]+$/i)': {to: 'city#findByCountryAndStateAndCityUrlFriendlyName'},
'/countries/:\/^[a-z-]+$/i\/states/:\/^[a-z-]+$/i\/cities/:\/^[a-z-]+$/i': {to: 'city#findByCountryAndStateAndCityUrlFriendlyName'}
所有这些都试图让这个工作在上面,我尝试了所有这些不同的路由定义,没有一个匹配例如传入的请求:
/countries/united-states-of-america/states/illinois/cities/chicago
就是一个例子。我只是试图为我的koa路线定义一条有效的路线。
我有一个控制器,这些参数被映射到。所以to:part意味着我映射到以#命名的函数:[param name]映射到。
正如你可以看到的更多的故事,路线有点长,但我试图集中精力试图让正则表达式为国家工作作为一个例子。我的完整路线允许国家/ [姓名] /州/名称/城市/ [名称],它是[我想要允许他们用连字符发送的名称],是的连字符可以在那里,或者是随机还是没有。
我允许我们的网络团队就他们发送到我们API的一些seo名称请求匹配。
答案 0 :(得分:3)
united-?states-?of-?america
?
会-
成为可选项。
答案 1 :(得分:0)
我认为你的问题是你有一个字符串"unitedstatesofamerica"
,你想要匹配那个字符串,但是随机位置中间有任意数量的连字符。
在这种情况下,您必须自己构建一个正则表达式,您可以通过
来完成function make_regexp_with_inserted_hyphens(str) {
return new RegExp(str.split('') . map(chr => chr + "-?") . join(''));
}
make_regexp_with_inserted_hyphens("unitedstatesofamerica")
/u-?n-?i-?t-?e-?d-?s-?t-?a-?t-?e-?s-?o-?f-?a-?m-?e-?r-?i-?c-?a-?/
要匹配任何单词:
function make_multi_regexp_with_inserted_hyphens(strings) {
return strings.map(make_regexp_with_inserted_hyphens) . join('|');
}
make_multi_regexp_with_inserted_hyphens("germany", "stlucia")
/g-?e-?r-?m-?a-?n-?y-?/|/s-?t-?l-?u-?c-?i-?a-?/