2010-01-11 86 views
0

好伙计我已经轰炸了几天试图找到一个很好的解决方案。 我有两种可能的地址格式。地址字符串分裂在JavaScript

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 
+2

更重要的是,你如何区分街道和城市? 在St之前有多个词的道路怎么样? 例如 Glen Eyre Road – 2010-01-11 19:20:38

+0

我在做什么,这是一个相当糟糕的做法。首先将逗号分割为两个字符串,一个是房屋号码街道和城市,另一个是州和邮政编码。 从那里我分裂的空间。对于州邮政来说,这很容易处理只返回的物品。 至于addie它的自我,我将通过从底部项目和顶部项目阵列来获得门牌号码和城市,然后结合到街道的剩余物的长街道名称。 我大混乱,并没有非常acurate因此我的问题在这里。 – Arasoi 2010-01-11 19:40:08

+0

你的代码的其余部分在哪里?这是不完整的代码,并没有用。 – TetraDev 2016-04-04 20:14:59

回答

2

颠倒字符串,做拆分,然后颠倒每个项目。

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

+0

谢谢我实际上并不知道Placemark.Address.Details。有了它,它有助于解决我的大部分问题,让我只想找到办法解决缺少门牌号的问题。基于Google现在返回的准确性水平,我可以更好地处理哪些问题。 – Arasoi 2010-01-12 15:04:46

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; 
} 

假设所有的街道,街,路或大道结束

+0

除非它们以Ct,Pl,Way结尾或者没有这样的后缀。 :-) – 2010-01-12 06:38:12

+0

或者如果它是“一些圣(如在街)圣(如在圣)某人城市”:) – kennytm 2010-01-12 06:41:38

0

var address = /[0-9]/.match(string.charAt(0)) ? string.split(“”):[“” ] .concat(string.split(“”));

这不是特别强大,但它占了两个枚举的情况,并且只有一行简明。

0

我有一个类似的问题,我试图解决。看起来,如果你寻找房屋号码右边的第一个空格,你可以将房屋号码与街道名称分开。

在波士顿你可以有一个房屋号码,包括一封信!另外,我见过包含“1/2”的房屋号码。幸运的是,1/2在前面是连字符,所以房号中没有嵌入空格。我不知道这是否是一个标准,或者我是否幸运。