前言:好久不見,。
最近在學習研究regex,其中有個特迷惑自己的知識點是分隔符 ( word boundary) [\b] (注:為了方便,後文都以來包含字元,並不是reg規則裡面的 ),後面查詢諮詢了解,明白了,記錄下來,希望幫到恰好迷惑的你。
[\b] 官方解釋是:match a word boundary,匹配乙個單詞邊界,也就是單詞和空格之間的位置,它本身不匹配任何字元。一般它有三種情況,如下:
在乙個 \w 字元之前,eg: \bend
在乙個 \w 字元之後,eg: end\b
在兩個字元之間 ;
情況1,2都比較容易理解,這裡就略過,主要從第3種情況來講講理解。
最開始從網上看到這樣一句話:「如果需要更精確的說法,[\b] 匹配這樣的位置:它的前乙個字元和後乙個字元不全是(乙個是,乙個不是或不存在) [\w] (匹配字母或數字或下劃線或漢字)」;
那做個試驗:
var reg = /end\band/g;var string = 'wenkend,end,and,endend';
alert( reg.test(string) ) ;
//false
根據上述理解 [\b] 要求它分隔的是一邊是 [\w] , 一邊是非 [\w]。我最開始理所當然的理解為正規表示式 [ end\band ] 匹配字串 [end,and] end的右邊是分隔符 [,] ,符合匹配,and的左邊是分隔符 [,] , 符合匹配。那麼它就應該符合匹配,可是為什麼結果是 false 呢?
後面發現自己大錯特錯。
正確理解如下分三步來理解:
-----------------/end\band/g, "end,and" (匹配end,true
) | |
-----------------
/end\band/g, "end,and" (匹配end後面是否有分隔符,有[,] - true
) | |
------------------
/end\band/g, "end,and" (now,接下來匹配的是否是字元and,因為 [\b]只是匹配匹配乙個位置,本身並不匹配任何字元,所以
等待匹配的字串應該是 [,and] ,而不是[and],顯而易見,[,and] 並不符合匹配規則 [and] - false)
總結來說就是:[end\band] 或者其他類似這樣的正規表示式是沒有意義的,可以說永遠也不會存在的。
如果 [\b] 在中間,regex表示式寫法必須遵循在 [\b] 的左右兩側乙個是[\w],乙個是非 [\w],例如 [end\,] .
如有錯誤或疑問或建議,請指正,謝謝~
正規表示式 符號的正確理解方式
這個符號在正規表示式的中的應用相信是所有程式設計師都掌握的,因為它是正規表示式中最基礎最常用的知識點。它在正規表示式中表示兩種不同的意義 1 表示匹配一段文字開頭的位置,注意,匹配的是乙個位置,而不是具體的某個字元,匹配位置 在正規表示式中有很重要的意義。這個正規表示式就是用來匹配以小寫的 a 開頭...
以逗號分隔的正規表示式 再見,正規表示式
寫過正規表示式的人都知道,正規表示式入門不難,寫起來也容易。但是正規表示式幾乎沒有可讀性可言,維護起來,真的會讓人抓狂,別以為這段正則是你寫的就可以駕馭它,過個乙個月你可能就不認識它了。完全可以說,天下苦正則久矣。今天給你介紹乙個好東西,可以讓你擺脫正則的噩夢,那就是 python 中乙個非常冷門的...
正規表示式理解
正規表示式問題 string regex 1 d 2 0 4 d 25 0 5 1 9 d 1 9 1 d 2 0 4 d 25 0 5 1 9 d d 1 d 2 0 4 d 25 0 5 1 9 d d 1 d 2 0 4 d 25 0 5 1 9 d d 幫我把這一段解釋下,怎麼看都看不懂 驗...