簡體   English   中英

匹配正則表達式中的所有數字,除了短語 foo2020

[英]Match all numbers in regex except for phrase foo2020

在混亂的字符串中,例如:dfnjvqifoo2020o43e25w54p32n5qvto4325432543nvgn4325gn2020repw

我想匹配字符串中的所有數字,除了短語 foo2020

我試過 /(?<,foo)\d+/g 問題是 foo2020 中的 020 在不應該匹配時得到匹配,我知道這是因為 \d 表示匹配單個數字但我不知道如何獲得圍繞這個

您的正則表達式/(?<!foo)\d+/g匹配任何一個或多個不直接foo的數字。 這意味着,如果最左邊的數字沒有緊跟foo之前,它將與這個正則表達式匹配。

您需要做的只是添加另一個限制:如果左邊有一個數字,則不要開始匹配數字,即添加(?<!\d)左側數字邊界構造

/(?<!foo)(?<!\d)\d+/g
//       ^^^^^^^

請參閱正則表達式演示

注意兩個連續的lookbehinds, (?<?foo)(?<!\d)在同一個 position 一個接一個地執行,這意味着如果當前的左邊有foo一個數字,則不會匹配地點。

如果你需要確保右邊沒有數字,append (?!\d) ,一個右手數字邊界結構,在\d+模式之后。 此處不需要,但如果您需要在abc50def中匹配50而不是在abc500def中匹配,則需要此負前瞻。

如果您只想要匹配,您可以將\d*添加到后視。 請注意,並非所有瀏覽器都廣泛支持此功能。 我將在例如 chrome 或 nodejs 中工作。

(?<!foo\d*)\d+

解釋

  • (?<!foo\d*)負向后視,斷言左邊的不是foo后跟 0+ 位
  • \d+匹配 1+ 個數字

正則表達式演示


另一種選擇是使用捕獲組,匹配您不想要的並捕獲您想要的。

foo\d+|(\d+)

正則表達式演示

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM