簡體   English   中英

express js:使用RegEx的條件路由參數

[英]express js: Conditional route parameters with RegEx

我需要匹配具有以下形式的路由: /city-state-country

city可以采用以下格式:舊金山(多字以“-”分隔)或newtown(單字)。

還有一些國家缺少state ,所以路線中的“ state ”參數應該是可選的。

如何嚴格匹配以匹配我的路由模式,這意味着它將使用2個或3個以“-”分隔的參數?

我有這樣的事情:

app.get(/([A-Za-z\-\']+)-([A-Za-z\']+)-([A-Za-z\']+)/, routes.index_location);

但是,它沒有用。

最終,這樣的情況不起作用:

/c/san-jose-ca-us
/san-jose-ca-us-someweirdstuff

san-jose-ca-us-someweirdstuff均可解析為san-jose-ca (市) - us (州) - someweirdstuff (國家),所以它是完全有效的情況下,

除非您錯過了任何事情,否則一般而言,該任務是不可能的。 我們知道us不是一個州,但是正則表達式不是。

您可以嘗試將城市中的破折號限制為一個,或者列舉所有可能的國家,或者進行類似的操作……無論如何,這實際上與正則表達式無關。

實際上,有一種方法。 但是,這將需要一個多步驟的過程。 在第一遍中,用不同的定界符替換所有兩個字母狀態(因為它們是可選的)。 在第二遍中,使用不同的分隔符替換所有國家/地區,以便您識別城市。 在第三遍中,用其他字符替換所有城市破折號,並用破折號分隔符重新添加州和國家。 在最后一個步驟中,將您的城市替換為所需的分隔符。

例如:

  1. 用〜$ 1替換/-(al|ca|az...)/ san-jose-ca-us = san-jose〜ca-us
  2. 用〜$ 1替換/-(.+)$/ san-jose〜ca-us = san-jose〜ca〜us
  3. 用* $ 1替換/-/ san-jose〜ca〜us = san * jose〜ca〜us
  4. 用-san * jose〜ca〜us替換/〜/ = san * jose-ca-us

等等

如果只希望將信息保留在1級層次結構中,則可以嘗試使用下划線定界符。 因此,您的網址應為: city_state_country

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM