[英]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))
任務是查找(並替換)“單個”數字2,而不將其嵌入由多個數字組成的數字中。
用正則表達式而言,可以表示為:
2
。 第一個條件的正則表達式很簡單-僅2
。 在其他形式的正則表達式中,例如PCRE ,為了禁止以前的字符,您可以在后面使用負號 ,但不幸的是Javascript正則表達式不支持它。
因此,為了避免這種情況,我們必須:
(^|\\D)
。 2
。 幸運的是,最后一個條件可以表示為負超前 ,因為甚至Javascript regex也支持它: (?!\\d)
。
因此整個正則表達式為:
(^|\D)2(?!\d)
找到這樣的匹配項后,您必須將其替換為第一個捕獲組的內容和3 (替換數字)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.