兩個正則坑

2022-03-10 08:38:06 字數 1123 閱讀 9542

先看第乙個,**

var re = /^\d\-\d$/;

var r1 = re.test('010-12345');

console.log(r1);

結果控制台給出false。問題在哪?

發現把逗號後的空格刪了就好了。習慣性在逗號後敲空格了,尤其是es6對物件進行擴充套件以後,以後不能這樣子了。

接下來看個比較難的,零寬正向斷言,不熟悉的話可以看看《js權威指南》和這篇文章。

在寫貨幣千分位格式化的時候,正確是這樣子的,先確定了零寬的位置:222335,然後匹配了前面的捕獲組:32,接下來把32換成了32, 。因為是全域性匹配,我們接著進行,先確定了零寬的位置:335,然後匹配了前面的捕獲組:222,接下來把222換成了222, 。我們接著進行,先確定了零寬的位置:335,然後前面匹配不上了,正則匹配結束。另外,對於87這樣的兩位數,匹配是不成功的,返回原數。

var a = '32222335'.replace(/(\d)(?=(\d)+$)/g, '$1,'); /*

32,222,335

*/

倘若把零寬斷言的?=去了會怎麼樣呢,答案很明顯

var a = '32222335'.replace(/(\d)(\d)+$/g, '$1,'); /*

32,*/

坑出現了

var a = '32222335'.replace(/(\d)(?=(\d)+)$/g, '$1,'); /*

32222335

*/

把匹配字串結尾位置的$拿出來後,就成這樣子了。為什麼會這樣子,沒太搞明白。暫時的理解是匹配不成功,沒有字串替換掉。因為要求1-3個數字結尾,而結尾的後面還要有1個或以上的零寬斷言,這沒法實現,所以不成功。

真正要精通正則還是挺難的。

另,帶小數點的

function

currency (num)

num = number(num).tofixed(2).tostring().replace(/\d+/, function

(n) )+$)/g, function ($1) )

})return

num }

WKWebView的兩個坑點

蘋果在 wkwebview 中的 js runtime 裡事先注入了乙個 window.webkit.messagehandlers.giveuid.postmessage 方法,我們可以使用這個方法直接向 native 層傳值,異常方便。首先,我們要把乙個名為 giveuid 的 scriptme...

React兩個bug踩坑

import react from react 複製 console報錯render找不到,這是因為react已經把reactdom分離出來,這樣引用會出錯,改為 import react from react import reactdom from react dom 複製 後正常 consol...

關於sqlmap的兩個小坑

i春秋作家 lsa 0x00 概述 近日在利用sqlmap注入測試時遇到乙個奇怪的現象,高版本sqlmap無法檢測出注入,但是低版本的可以測出注入,並且能跑出資料不是誤報,經過對比測試和檢視sqlmap原始碼,發現兩個小坑。0x01 情景重現 注入點形式 json whereparams 可注入引數...