0

好吧,伙计们,我已经轰炸了几天,试图为这个问题找到一个好的解决方案。我有两种可能的地址格式。

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

[编辑]

对于那些想知道这就是我正在做的 atm 的人。(更清洁的版本)

     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 
4

4 回答 4

2

反转字符串,进行拆分,然后反转每个项目。

更新:从您发布的片段中,在我看来,您从 Google GClientGeocoder 地标获得了地址。如果这是正确的,为什么你得到的是非结构化地址(Placemark.address)而不是结构化地址( Placemark.AddressDetails)?这将使您的生活更轻松,因为您必须尝试仅解析 ThoroughfareName,这是地址的街道部分,而不必解析其他所有内容。

于 2010-01-11T19:18:42.083 回答
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 结束。

于 2010-01-11T19:20:54.357 回答
0

变量地址 = /[0-9]/.match(string.charAt(0)) ?string.split(" ") : [ " " ].concat(string.split(" "));

这不是特别健壮,但它考虑了两个列举的情况,并且只有一行简洁。

于 2010-01-11T19:22:12.713 回答
0

我有一个类似的问题,我正在尝试解决。看来,如果您查找门牌号右侧的第一个空格,则可以将门牌号与街道名称分开。

在波士顿,您可以拥有一个包含字母的门牌号!此外,我还看到了包含“1/2”的门牌号码。幸运的是,1/2 前面有一个连字符,所以门牌号中没有任何嵌入的空格。我不知道这是一个标准还是我只是走运。

于 2010-06-08T14:59:31.850 回答