-2

次のいずれかに対応できるようにしたい。

unitedstatesofamerica
united-states-of-america

したがって、ダッシュの有無にかかわらず文字に一致し、どちらも許可します。

これの目的は、ルーターに着信する uris を一致させることができるようにすることです。

たとえば、発信者が seo に適した値を送信できるようにするため、az に柔軟性を持たせ、任意の単語を区切ることができるようにしたいと考えています。

/countries/united-states-of-america
/countries/unitedstatesofamerica
/countries/germany
/countries/stlucia
/countries/st-lucia

私はkoa-controllerを使用しており、これを許可する正規表現ルートを考え出そうとしています。私の知る限り、koa-controller は正規表現へのミドルウェア パスを使用していると思います

私が求めていることは、理解できなかった人にとって不明確ではありません。名前にダッシュがあるかどうかにかかわらず、呼び出し元が名前を許可する URL を送信できるようにする、koa-controller ルートの正規表現を使用してルートを作成しようとしています。

これが私が運なしで試したことです。正規表現を正しく取得していないか、正規表現を 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] がマップする # にちなんで名付けられた関数にマップしていることを意味します。

ストーリーには続きがあることがわかるように、ルートは少し長くなりますが、例として国で正規表現を機能させることに集中しようとしました。私の完全なルートでは、countries/[name]/states/name/cities/[name] が許可されます。これは [name] であり、ハイフンを付けて送信するかどうかを許可します。はい、ハイフンが存在するか、ランダムであるか、または存在しない可能性があります.

Web チームが API に送信するいくつかの seo 名の一致をリクエストできるようにしています。

4

2 に答える 2

3
united-?states-?of-?america

?オプションにし- ます。

于 2015-10-04T04:41:24.893 に答える
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-?/
于 2015-10-04T05:06:29.730 に答える