2014-09-22 46 views
-1

我有一個所有大寫地址名稱和數字的集合,我想提取每個地址的第一個遇到的地址編號。下面的示例顯示我想什麼,從每個提取:地址編號的最佳javascript正則表達式

  • 80 ROSE小屋 - > 80
  • 80A ROSE小屋 - > 80A
  • 80一支玫瑰小屋 - > 80一
  • 80ROSE COTTAGE - > 80(意外無空格)
  • [其他任何文本] 80 ROSE小屋 - > 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

的最後一個使參考這引起我對可能的單個文本字符之後的任何字母數字字符(例如, 80)在我的JavaScript正則表達式。但是,如果不添加替代的「只找到數字」組(\ d +),我上面的第四個示例不會返回數字。

(?:\d+\s*[A-Z]?(?![A-Z0-9]))|(?:\d+)) 

有沒有辦法將這兩個組合成一個正則表達式?或者,這是不可能的JavaScript的正則表達式實現?

任何與此有關的幫助將大大升值。

+1

難道真的要那麼複雜嗎?地址通常只有一個數字,它必須是您要查找的數字。如果它後面跟着一個像80A一樣的字符,或者後面跟着一個像80A那樣的空格,那麼這就是你要找的東西。 – 2014-09-22 11:04:59

+0

/嗨感謝您的回覆。數據集並不完美,與我最後兩個例子一樣,有時候這個數字並不是一開始就是數字,或者是一個沒有分隔空間的數字。在不使用前面的情況下,我發現80ROSECOTTAGE會導致80R,當它應該是80時。因此我現在添加了僅數字的替代組。這是有效的,但我想知道是否有一種方法可以在沒有組的情況下進行組合。 – Derek 2014-09-22 11:23:35

回答

0
(\d+\s*(?:[A-Z](?![A-Z]))?) 

你可以試試這個。

查看演示。

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

+0

嗨,我試圖將你的建議應用到我的正則表達式中的第一組(以便我可以放棄第二組)。我看起來最好的做法是:\ d + \ s * [AZ]?(?![AZ] {2,})這個工作很好,除了它似乎從80下降到零時,示例文本是'80ROSE COTTAGE' 。你是否想要以其他方式應用這個?我需要的是:[至少一位數字]後跟[任意或不是空格],後面跟[任何一個'A到Z',後面沒有另一個'A到Z'](或失敗最後一部分,只是原始數字)。我希望這是有道理的? – Derek 2014-09-22 14:50:26

+0

@Derek你必須使用.replace函數。並用''替換。只使用給定的正則表達式,而不是其他。 – vks 2014-09-22 14:55:11

+0

嗨,對不起,我沒有意識到是這種情況。我是否認爲在'A 80 A'上使用這個替換將返回'A 80 A'而不是'80 A'? – Derek 2014-09-22 15:22:01