[英]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級層次結構中,則可以嘗試使用下划線定界符。 因此,您的網址應為: city_state_country
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.