[英]JS Regex to match Chars with - or without -
我希望能够匹配以下任一项:
unitedstatesofamerica
united-states-of-america
所以匹配有或没有破折号的字符,允许。
这样做的目的是让 uris 进入我的路由器进行匹配。
例如,我想允许 az 的灵活性并允许分隔任何单词,因为我们可能允许调用者发送 seo-friendly 值
/countries/united-states-of-america
/countries/unitedstatesofamerica
/countries/germany
/countries/stlucia
/countries/st-lucia
等等。
我正在使用koa-controller并试图想出一个正则表达式来实现这一点。 据我所知,我认为 koa-controller 使用中间件路径到正则表达式
我问的是不明白的人不清楚。 我只是想为我的 koa-controller 路由创建一个带有正则表达式的路由,允许调用者发送允许名称的 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 路线定义一条有效的路线。
例如countryUrlFriendlyName只是命名参数,映射到我在 koa-controller 中间件中的控制器操作方法。 我想允许人们为那些带破折号或不带破折号的参数发送值。
我有一个控制器,这些参数被映射到。 所以 to: 部分意味着我要映射到一个以 # 命名的函数,那些 :[param name] 映射到。
正如你所看到的,故事还有更多,路线有点长,但我试图专注于让正则表达式为国家工作作为例子。 我的完整路线允许国家/[name]/states/name/cities/[name] 是我想允许他们发送带连字符或不带连字符的 [name],是的,连字符可能在那里,或随机或不存在.
我允许我们的网络团队请求匹配他们发送到我们 API 的一些 seo 名称。
united-?states-?of-?america
?
将使-
可选。
我假设您的问题是您有一个字符串"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-?/
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.