【发布时间】:2014-11-16 07:42:15
【问题描述】:
我有一个所有大写地址名称和数字的集合,我只想提取每个地址的第一个遇到的地址数字。以下示例显示了我想从每个示例中提取的内容:
- 80 玫瑰小屋 -> 80
- 80A 玫瑰小屋 -> 80A
- 80 A 玫瑰小屋 -> 80 A
- 80ROSE COTTAGE -> 80(意外无空格)
- [任何其他文本] 80 ROSE COTTAGE -> 80
我在这里和互联网上的其他地方发现了一些类似的问题,但它们总是将地址作为一个整体来处理,而不仅仅是地址名称和号码:
Match each address from the address number to the 'street type'
Regular Expression: Any character that is NOT a letter or number
javascript regular expressions address number
JavaScript regex to validate an address
最后一个引用了前瞻,这导致我为我的 JavaScript 正则表达式中潜在的单个文本字符(例如 80 A)之后的任何字母数字字符构建否定前瞻。但是,如果不添加替代的“仅找到数字”组 (\d+),我上面的第四个示例不会只返回数字。
(?:\d+\s*[A-Z]?(?![A-Z0-9]))|(?:\d+))
有没有办法将这两组组合成一个正则表达式?或者这在 JavaScript 的正则表达式实现中是不可能的?
我们将不胜感激。
【问题讨论】:
-
真的有那么复杂吗?一个地址通常只有一个号码,该号码必须是您要查找的号码。如果它后面跟着一个直接像
80A中的字符,或者如果它后面跟着一个像80 A一样用空格括起来的字符,那么这就是您要查找的内容。 -
/嗨,感谢您的回复。数据集并不完美,与我的最后两个示例一样,有时数字不在开头,或者数字后面没有分隔空格的单词。如果不使用前瞻,我发现 80ROSECOTTAGE 会导致 80R,而它应该只是 80。因此,我目前添加了仅数字替代组。这行得通,但我想知道是否有一种方法可以在没有组的情况下进行组合。
标签: javascript regex street-address