簡體   English   中英

正則表達式完全匹配數字,而不是數字

[英]Regex exact match on number, not digit

我有一種情況,我需要使用javascript查找並替換大字符串中的數字。 假設我有數字2,我想用3代替它-聽起來很直截了當,直到出現22、32等。

該字符串可能如下所示:
"note[2] 2 2_ someothertext_2 note[32] 2finally_2222 but how about mymomsays2."

我想把它變成這樣:
"note[3] 3 3_ someothertext_3 note[32] 3finally_2222 but how about mymomsays3."

顯然,這意味着.replace('2','3')不存在,所以我去了正則表達式。 當我處理從頭到尾的字符串時,我發現很容易獲得完全匹配,即: /^2$/g 但這不是我所擁有的。 我嘗試了分組,僅數字,通配符等,但無法正確匹配。

非常感謝您提供有關如何完全匹配數字的幫助(其中0 <=數字<= 500是可行的,但在正則表達式中無需限制范圍)。

查看正則表達式在這里使用

(\D|\b)2(?!\d)
  • (\\D|\\b)捕獲非數字字符或與單詞邊界匹配的位置
  • (?!\\d)負前瞻,確保后面沒有數字

交替:

(^|\D)2(?!\d)      # Thanks to @Wiktor in the comments below
(?<!\d)2(?!\d)     # At the time of writing works in Chrome 62+

 const regex = /(\\D|\\b)2(?!\\d)/g const str = `note[2] 2 2_ someothertext_2 note[32] 2finally_2222 but how about mymomsays2.` const subst = "$13" console.log(str.replace(regex, subst)) 

您可以使用否定的提前查詢:

(\\D|^)2(?!\\d)

替換為: ${1}3

如果支持向后看:

(?<!\\d)2(?!\\d)

替換為: 3

任務是查找(並替換)“單個”數字2,而不將其嵌入由多個數字組成的數字中。

用正則表達式而言,可以表示為:

  • 匹配數字2
  • 前一個字符(如果有)不能為數字。
  • 下一個字符(如果有)不能為數字。

第一個條件的正則表達式很簡單-僅2 在其他形式的正則表達式中,例如PCRE ,為了禁止以前的字符,您可以在后面使用負號 ,但不幸的是Javascript正則表達式不支持它。

因此,為了避免這種情況,我們必須:

  • 放置與文本開頭或數字以外的其他內容匹配的捕獲組: (^|\\D)
  • 然后把正則表達式匹配為22

幸運的是,最后一個條件可以表示為負超前 ,因為甚至Javascript regex也支持它: (?!\\d)

因此整個正則表達式為:

(^|\D)2(?!\d)

找到這樣的匹配項后,您必須將其替換為第一個捕獲組的內容和3 (替換數字)。

暫無
暫無

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

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