我真的不太了解正则表达式我自己解决这个问题......
我正在使用地理定位API,我的目标是大致了解访问者的下落,以便我可以列出该特定区域提供的服务。
这是通过邮政编码字符串的前导部分完成的。例如n17 9ht
,我感兴趣的是n17
这一切都很公平,但我在chrome和IE9中获得了不同的输出,firefox的里程更好,并自动返回postalCode字符串。
2 Castlebar Park, London, Greater London W5 1BX, UK
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
一样简单 - 所以我认为,逻辑需要是:
任何帮助表示感谢。
答案 0 :(得分:2)
以下是根据Wikipedia article(包括部分)支持所有英国邮政编码语法的最长正则表达式之一:
([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$
我没有正确测试,但至少适合你的情况。
答案 1 :(得分: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"
(当然你实际上可以测试.match()
的回报以确保它有效,但是如果它有效,那么你想要的那个就是匹配数组的第二个元素。)