案例 使用正規表示式中的正向預查和反向預查

2022-02-12 05:58:56 字數 1008 閱讀 5964

需求如下:

從excel**裡複製下來的數千行下列字串如上,需要儲存下「r20171028153620837」的字元,其餘刪除。

最快捷的方法就將這一列值複製到notepad++中,使用正規表示式「r\d」匹配到這一字元,怎麼樣能得到匹配之外的結果而進行replace替換為空呢,那這樣就大工告成了。

然後就用到了正向預查:在子模式的內部前面新增"?="  正向預查的意思是,子模式僅僅作為條件限制,並不作為匹配結果輸出,子模式前面的。

例如:

收取定金¥1000元單號收款單r20171028184433953

匹配「r20171028184433953」前面的數字字母和漢字就用到了正向預查 .*(?=r\d)

然後將「r20171028184433953」匹配到的結果進行替換,替換為字串為空。

接下來該處理「r20171028184433953」後邊有字串字母和數字的了,用到了反向預查。

反向預查:在子模式的內部前面新增"?<="。反向預查與正向預查很相似,子模式僅僅作為條件限制,不作為結果輸出。唯一不同的是,正向預查匹配子模式前面的結果作為匹配結果,而反向預查匹配子模式後面的結果作為匹配結果。

r20171028164012754定金單號

匹配「r20171028164012754」前面的漢字就用到了反向預查 (?<=r\d).*

使用上述正則就能匹配到「r20171028164012754」後邊相關的字元替換為空,即可。

總結:若想替換掉正則匹配結果的前面和後邊的字元為空,可分為將此字串結合中間字元的正則進行正向預查和反向預查,查到前後字元進行替換為空即為索要的結果。

最後 我想說 正規表示式是強大的,你能通過它得到如何你想要的東西,且輕量化了工作內容,何樂而不為~

正規表示式的正向預查

首先,讓我們先做一道演算法題 將一串帶小數的金額,例如 1010000.5689,每3位加上 分隔符。剛開始我的做法是將.左邊的部分單獨提取出來進行正則替換,這花費了不少的步驟,直到我發現這種做法 function commafy str d g,1,console.log commafy 1010...

正規表示式之正向預查和反向預查

正向預查 1.正向正預查 例如 foo bar 匹配後面帶有bar的foo 它可以匹配 foobar,abcfoobar 中的foo 但是不能匹配 fooabc 中的foo 2.正向負預查 例如 foo bar 匹配後面不帶bar的foo 它可以匹配 foo123 但是不能匹配 foobar 負向預...

正規表示式 js 含有 正向預查和負向預查

第一次見到正規表示式的時候,感覺好難啊,要記得東西怎麼那麼多.學了好幾遍,但還是很矇圈,可能是用的少,平時用的時候也就那麼基礎需要使用,再者就是複製貼上正規表示式.那麼什麼是正規表示式呢?正規表示式就是乙個描述字元規則的物件.那為什麼會有正規表示式呢,這裡引用沫晴姐姐的一句話,就是因為計算機笨唄 沫...