Javascript 正则表达式街道地址匹配

Javascript 正则表达式街道地址匹配,javascript,regex,match,highlight,street-address,Javascript,Regex,Match,Highlight,Street Address,虽然我知道匹配一个街道地址永远都不会完美,但我希望创建两个在大多数情况下都很接近的正则表达式语句 我想强调一个地址。我在regex很差劲,我试着接近,但有人能帮我理解我如何才能让这一切变得更好吗 字符串: 早上6点到晚上11点,Palma Sola小学,地址:佛罗里达州布拉登顿西北第五大道6806号,邮编:34209,快到dsfsd sa fsa fasdf asfsds 5001西边找吧你妈妈不住在这里我的2005年福特ranger 正则表达式1: /\(a-a-zA-Z[1245\s+){{

虽然我知道匹配一个街道地址永远都不会完美,但我希望创建两个在大多数情况下都很接近的正则表达式语句

我想强调一个地址。我在regex很差劲,我试着接近,但有人能帮我理解我如何才能让这一切变得更好吗

字符串:

早上6点到晚上11点,Palma Sola小学,地址:佛罗里达州布拉登顿西北第五大道6806号,邮编:34209,快到dsfsd sa fsa fasdf asfsds 5001西边找吧你妈妈不住在这里我的2005年福特ranger

正则表达式1:

/\(a-a-zA-Z[1245\s+){{1,5}{1,5}{1,1,5}{1,5}{1,1,2})是(([s\2,5 5 5}{{2,5}{2,5}{2,5 5 5}s+s+(((([a-a-a-a-a-a-Z-p-p-p)p)p]m\p)m\m\m\m\m\m\m\b)m\b)m\b)m\b)b)b)b)((((((((((([a-a-a-a-a-a-a-a-a-a-扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎-Z[s-Z[s-Z[s-Z\1245)m\1245[s[s[s\1245]m)m\s[a-zA-Z |\s+]{1,30}{1,2})([\s |\,|.]+)?\b(AK)阿方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方|或| PA | RI | SC | SD | TN | TX | UT | VA | VI | VT | WA | WI | WV | WY | | | | | | | | | | | | | | | | | | | | |

(有时只有一条街道和一座城市,但没有州或邮编)

正则表达式2:

/\(b)b({2,5}{{2.5}{2.5}{{2.5}{2.5}{2.5}{2.5}{b({2.5}b({2.5}b)m(b)m(b)m(b)m(m)b)m(m)b)b)(西北部(n)奈奈奈奈赛赛赛赛赛斯(北)北、南、南、南、南、南、西、南、西、西、东、东、东、东、东、北、东、北、东、北、北、东、北、东、北以及n n n n n(1245 5 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0(东、东、东、东、北、n n n n n n n n)n n n n n(该该该上述上述上述上述上述上述上述上述上述上述上述上述上述上述上述上述上述


摆弄它:

美国地址不是一种常规语言,无法通过使用正则表达式进行匹配。在某些孤立的情况下,它们很有用,但通常情况下,它们会让你失败,尤其是对于这样的输入

我曾经在一家地址验证公司工作。在回答你的问题时,“突出显示一个地址”在一个文本字符串中,我建议您尝试提取实用程序。这里有一些实用程序,我建议您四处看看,但这里是,使用您问题的输入,如您所见,它找到了地址并验证了地址:

API端点返回JSON,其中包含每个地址的起始位置和结束位置,以及关于每个地址的大量信息(请参见上图底部的CSV输出)


我赞扬您勇敢地尝试了那些正则表达式!希望这会有所帮助。

我需要对以下地址执行类似操作

迪尔菲尔德海滩东南20大道800号#603号

9801西北3街5号公寓,种植园

珊瑚泉格兰莫尔大道4-1号11909号

这是我用的正则表达式

\s*([0-9]*)\s((NW|SW|SE|NE|S|N|E|W))?(.*)((NW|SW|SE|NE|S|N|E|W))?((#|APT|BSMT|BLDG|DEPT|FL|FRNT|HNGR|KEY|LBBY|LOT|LOWR|OFC|PH|PIER|REAR|RM|SIDE|SLIP|SPC|STOP|STE|TRLR|UNIT|UPPR|\,)[^,]*)(\,)([\s\w]*)\n
它为地址的每个部分返回单独的组(我不需要为我的案例解析状态名)。 在这里试一试

马特是对的。正则表达式解析永远不会非常准确。如果你走上这条危险的道路,你将不可避免地有合理数量的误报和漏报。但是,如果你同意的话,我实际上喜欢使用两个正则表达式的组合—一个用于基于街道命名的方案,另一个用于城市网格方案:

街道名称系统:

/\b\d{1,6} +.{2,25}\b(avenue|ave|court|ct|street|st|drive|dr|lane|ln|road|rd|blvd|plaza|parkway|pkwy)[.,]?(.{0,25} +\b\d{5}\b)?/ig
电网系统

/(\b( +)?\d{1,6} +(north|east|south|west|n|e|s|w)[,.]?){2}(.{0,25} +\b\d{5}\b)?\b/ig
还要注意的是,如果地址没有州和zipcode,您基本上可以忘记提取街道名字后面的任何文本。

这对我很有用

if(address.match(/^\s*\S+(?:\s+\S+){2}/)) {
   console.log('good address!')
}

你没有说明你的最终目标,所以我们不知道你想要什么,也不知道我们可以如何帮助你。“让这更好”是相当模糊的:)我的眼睛。我的眼睛。欢迎来到Stack Overflow,@isuelt——已经有一段时间了,所以别忘了点击复选标记接受最有用的答案。我发现这个答案也很有用:另外一个验证想法是使用谷歌的地理编码API来确定他们是否有该地址的数据。这是一个答案还是SmartyStreets的广告?@Nick这是一个答案。如果是广告,我就不会说我在那里工作。我也不会建议他考虑其他的选择。以下是广告的样子: