我的输入是这样的:“78003凡尔赛CEDEX 3-法国”。这里的邮政编码是78003,凡尔赛是城市,CEDEX 3是可选部分,表示这是一个特殊的地址。
目前,我的正则表达式获取邮政编码,城市和国家/地区,但我无法获取CEDEX部分。我想我被一个贪婪的表情所欺骗,但我不知道该如何克服它。
var parseZipCityAndCountryRe = /(\d*)\s*(.*)(?:\s*CEDEX\s*(\d*))?\s*-\s*(.*)/i;
parseZipCityAndCountryRe.exec("78003 Versailles cedex 120 - France")
// current output
["78003 Versailles cedex 120 - France", "78003", "Versailles cedex 120 ", undefined, "France"]
// wished output
["78003 Versailles cedex 120 - France", "78003", "Versailles", "120", "France"]
最佳答案
使CEDEX
组为非可选
var parseZipCityAndCountryRe = /(\d*)\s*(.*)(?:\s*CEDEX\s*(\d*))\s*-\s*(.*)/i;
// ^
或将
.*
重复non-greedy:var parseZipCityAndCountryRe = /(\d*)\s*(.*?)(?:\s*CEDEX\s*(\d*))\s*-\s*(.*)/i;
// ^
获得理想的结果。