好的伙计们,我已经为了这个问题找到了一个很好的解决方案几天。 我所拥有的是两种可能的地址格式。
28 Main St Somecity, NY 12345-6789
or
Main St Somecity, Ny 12345-6789
我需要做的是将两个字符串拆分成一个这样构造的数组
address[0] = HousNumber
address[1] = Street
address[2] = City
address[3] = State
address[4] = ZipCode
我的主要问题是如何解释缺少门牌号码。没有整个数组将数据向上移动一个。
address[0] = Street
address[1] = City
address[2] = State
address[3] = ZipCode
[编辑]
对于那些想知道这就是我在做什么的人。 (清洁版)
place = response.Placemark[0];
point = new GLatLng(place.Point.coordinates[1],place.Point.coordinates[0]);
FCmap.setCenter(point,12);
var a = place.address.split(',');
var e = a[2].split(" ");
var x = a[0].split(" ");
var hn = x.filter(function(item,index){
return index == 0;
});
var st = x.filter(function(item,index){
return index != 0;
});
var street = '';
st.each(function(item,index){street += item + ' ';});
results[0] = new Hash({
FullAddie: place.address,
HouseNum: hn[0],
Dir: '',
Street: street,
City: a[1],
State: e[1],
ZipCode: e[2],
GPoint: new GMarker(point),
Lat: place.Point.coordinates[1],
Lng: place.Point.coordinates[0]
});
// End Address Splitting
答案 0 :(得分:2)
反转字符串,进行拆分然后反转每个项目。
更新:在您发布的代码段中,我觉得您从Google GClientGeocoder地标获取地址。如果这是正确的,为什么要获取非结构化地址(Placemark.address
)而不是结构化地址(Placemark.AddressDetails
)?这将使您的生活更轻松,因为您必须尝试仅解析ThoroughfareName,这是地址的街道级别部分,而不是必须解析其他所有内容。
答案 1 :(得分:0)
function get_address (addr_str) {
var m = /^(\d*)\s*([-\s\w.]+\s(?:St|Rd|Ave)\.?)\s+([-\s\w\.]+),\s*(\w+)\s+([-\d]+)$/i.exec(s);
var retval = m.slice(1);
if (!retval[0]) retval = retval.slice(1);
return retval;
}
假设所有街道都以St,Rd或Ave结束。
答案 2 :(得分:0)
var address = /[0-9]/.match(string.charAt(0)) ? string.split(“”):[“” ] .concat(string.split(“”));
这不是特别强大,但是它解释了两个列举的案例,并且只有一行简洁。
答案 3 :(得分:0)
我有一个类似的问题,我正在努力解决。看来,如果您查找门牌号右侧的第一个空格,您可以将门牌号与街道名称分开。
在波士顿,您可以拥有一个包含信件的门牌号码!另外,我看过包含“1/2”的门牌号码。幸运的是,1/2前面有一个连字符,因此门牌号中没有任何嵌入空格。我不知道这是一个标准,还是我只是幸运。