0

我真的对正则表达式知之甚少,无法自己解决这个问题,所以......

我正在使用地理定位 API,我的目标是大致了解访问者的下落,以便列出该特定区域提供的服务。

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

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

  • 铬合金:2 Castlebar Park, London, Greater London W5 1BX, UK
  • 即9:3-6 Mt Ave, London Borough of Ealing, London W5, UK

虽然这些都不是我的地址,但 W5 是正确的。

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

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

  • Greater London W5 1BX
  • London W5

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

我不关心 BFPO / GIR 案例,所以它几乎只是第 1 部分,它可以像n1或一样简单ec3a- 所以我认为,逻辑需要是:

  1. 提取完整或部分邮政编码。
  2. 参加第 1 部分(或唯一的部分)并将其传递下去。

任何帮助表示赞赏。

4

2 回答 2

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$

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

于 2011-12-28T11:39:57.910 回答
1

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

[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"

(当然,您实际上可以测试 return from.match()以确保它有效,但如果它有效,您想要的位将是匹配数组的第二个元素。)

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

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

于 2011-12-28T11:37:59.810 回答