地址字符串在javascript中拆分

时间:2010-01-11 19:14:05

标签: javascript string street-address

好的伙计们,我已经为了这个问题找到了一个很好的解决方案几天。 我所拥有的是两种可能的地址格式。

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 

4 个答案:

答案 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前面有一个连字符,因此门牌号中没有任何嵌入空格。我不知道这是一个标准,还是我只是幸运。