regex从地址字符串中提取英国邮编的一部分

regex to extract part of a UK postcode from an address string

本文关键字:一部分 英国 提取 地址 字符串 regex      更新时间:2023-09-26

我真的不太了解正则表达式来解决这个问题,所以…

我正在玩地理定位API,我的目标是得到一个关于访问者的下落的大致想法,这样我就可以列出在该特定区域提供的服务。

这是通过邮政编码字符串的前导部分完成的。例如n17 9ht,我的兴趣是n17

这很公平,但我在chrome和IE9中得到不同的输出,firefox要好得多,它会自动返回一个postalCode字符串。

  • chrome: 2 Castlebar Park, London, Greater London W5 1BX, UK
  • ie9: 3-6 Mt Ave, London Borough of Ealing, London W5, UK

而这两个都不是我的地址,W5是正确的。

问题是,我如何从两个可能的字符串中提取W5 ?

显然,字符串被,分割,所以我正在寻找从字符串中获得W5(或任何可能的英国邮政编码前导部分),看起来像:

  • Greater London W5 1BX
  • London W5

总是在邮政编码的两个部分之间有一个空格(如果提供了2-nd)。

我不关心BFPO/GIR的情况,所以它基本上只是第一部分,可以像n1ec3a一样简单-所以我认为,逻辑需要是:

  1. 提取全部或部分邮政编码
  2. 接受第一部分(或唯一的一部分)并传递给其他人。

感谢您的帮助。

这是根据维基百科文章(包括部分)支持所有英国邮政编码语法的最长正则表达式之一:

([A-Z]?'d(:? 'd[A-Z]{2})?|[A-Z]'d{2}(:? 'd[A-Z]{2})?|[A-Z]{2}'d(:? 'd[A-Z]{2})?|[A-Z]{2}'d{2}(:? 'd[A-Z]{2})?|[A-Z]'d[A-Z](:? 'd[A-Z]{2})?|[A-Z]{2}'d[A-Z](:? 'd[A-Z]{2})?),'s*UK$

我没有正确地测试它,但至少适用于您的情况

我不熟悉英国的邮政编码,但你似乎是在说,已经删除了地址的其他部分,你已经把地址缩小到:

[Some words] [several-character code] [optional three-character code]

需要两个字符的代码。如果这是正确的,那么也许一个正则表达式像这样:

/'s([^'s]{2,4})(?:'s...)?$/

那么您想要的位将由.match():

返回
var addressPart = "Greater London W5 1BX",
alert(addressPart.match(/'s([^'s]{2,4})(?:'s...)?$/)[1]); // "W5"

(当然,您可以测试.match()的返回值以确保它工作,但是如果工作,则您想要的位将是匹配数组的第二个元素。)

狡猾的演示:http://jsfiddle.net/HjD7w/1/

编辑:我怀疑这不会完全工作,因为在某些情况下,城市名称的最后一个单词可能会被误认为邮政编码的第一部分,但如果有关于如何在邮政编码中匹配alpha和数字字符的固定规则,您可以修复它。(虽然我不知道规则)