2010-01-11 90 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在前面是連字符,所以房號中沒有嵌入空格。我不知道這是否是一個標準,或者我是否幸運。