我需要匹配具有此格式的路线:/city-state-country
city
的格式可以是:san-francisco(由' - '分隔的多字组)或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
答案 0 :(得分:1)
san-jose-ca-us-someweirdstuff
可以解析为san-jose-ca
(城市) - us
(州) - someweirdstuff
(国家/地区),因此这是完全有效的案例
除非你错过了什么,否则这项任务通常是不可能的。我们知道us
不是状态,但正则表达式不是。
您可以尝试将城市中的破折号限制为一个,或者枚举所有可能的国家/地区,或者执行类似的操作......无论如何,这与正则表达式无关,实际上。
答案 1 :(得分:0)
实际上,有一种方法。但是,这需要一个多步骤的过程。在第一遍中,用不同的分隔符替换所有两个字母状态(因为它们是可选的)。在第二轮中,使用不同的分隔符替换所有国家/地区,以便您可以识别城市。在第三个过程中,将所有城市破折号替换为其他角色,并使用破折号分隔符添加状态和国家/地区。在最后一遍中,使用您期望的分隔符将您的城市替换为不同的分隔符。
例如:
等
答案 2 :(得分:0)
如果您只想将信息保存在1级层次结构中,可以尝试使用下划线分隔符。所以,您的网址如下:city_state_country