javascript中的地址字符串拆分

javascript中的地址字符串拆分,javascript,string,street-address,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

好了,伙计们,我花了好几天的时间来寻找解决这个问题的好办法。 我有两种可能的地址格式

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
[编辑]

对于那些想知道我在做什么的人。(清洁版)


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

更新:在我看来,从您发布的代码片段中,您似乎可以从Google GClientGeocoder Placemark获得地址。如果这是正确的,为什么要得到非结构化地址()而不是结构化地址()?这将使您的生活更轻松,因为您将不得不尝试只解析ThroughterName,这是地址的街道级别部分,而不必解析其他所有内容

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结尾

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


这不是特别可靠,但它解释了两个列举的案例,并且仅在一行中简洁明了。

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


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

更重要的是,你如何区分街道和城市?那么在圣彼得堡之前有多个单词的道路呢?e、 格伦·艾尔路我正在做的是一种相当糟糕的方式。首先把逗号上的字符串分开,给我两个字符串,一个是门牌号street和city,另一个是state和zipcode。从那里我在空间上分开。对于州邮政来说,这很容易处理,只对退回的物品进行处理。至于addie-its-self,我会将底部项目和顶部项目从数组中删除,以获得房屋编号和城市,然后将剩余内容合并到街道中,以此来说明long street的名称。我的问题很混乱,不太准确。你的代码在哪里?这是不完整的代码,没有用处。除非它们以Ct、Pl、Way结尾,或者没有这样的后缀。:-)或者如果它是一个“某个街(如在街上)某个城市(如在圣城):)谢谢你,我实际上不知道Placemark.Address.Details。这有助于解决我的大部分问题,让我只想找到一种方法来处理缺少门牌号的问题。根据谷歌现在返回的准确度,我可以更好地处理这个问题。
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;
}