【问题标题】:Best javascript regex for an address number [closed]地址号的最佳 javascript 正则表达式 [关闭]
【发布时间】: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'

regex street address match

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


【解决方案1】:
(\d+\s*(?:[A-Z](?![A-Z]))?)

你可以试试这个。

查看演示。

http://regex101.com/r/kM7rT8/13

【讨论】:

  • 嗨,我正在尝试将您的建议应用于我的正则表达式中的第一组(以便我可以删除第二组)。我似乎做的最好的是: \d+\s*[AZ]?(?![AZ]{2,}) 当示例文本为 '80ROSE COTTAGE' 时,它似乎从 80 中删除了零,这很好用.您是否打算以其他方式应用它?我需要的是: [至少一个数字] 后跟 [任何或没有空格] 后跟 [任何一个 'A 到 Z' 后面没有另一个 'A 到 Z'] (或最后一部分失败,只是原始数字)。我希望这是有道理的?
  • @Derek 你必须使用 .replace 函数。并用 `. 替换,只使用给定的正则表达式,别无其他。
  • 嗨,对不起,我没有意识到是这样的。我是否认为在“A 80 A”上使用它进行替换会返回“A 80 A”而不是“80 A”?
  • @Derek 它会返回A 80 A
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-11
  • 1970-01-01
  • 2011-08-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多