const formatter = (num) => {
const reg = /^\d*$/
if(!reg.test(num)){
throw '輸入內容有誤!請輸入數字'
}else{
return String(num).replace(/\d{1,3}(?=(\d{3})+(\.|$))/g,'$&,')
}
}
var str = formatter(1234567)
console.log('str', str)
答案是有了,諸位有木有思考過這個正則的意義呢?
科普一下:
上述正則表達式分析:
\d{1, 3}
\d :代表匹配數字字符串
{1, 3} : 代表1 - 3位字符串
/d{1, 3} : 代表匹配到字符串爲1-3位的,比如 : '123', '12345', 'w123'
?=
這個規則就高級那麼點點了,查文檔你會發現它的定義是:正向肯定預查(look ahead positive assert),在任何匹配pattern的字符串開始處匹配查找字符串。這是一個非獲取匹配,也就是說,該匹配不需要獲取供以後使用。例如,"Windows(?=95|98|NT|2000)"能匹配"Windows2000"中的"Windows",但不能匹配"Windows3.1"中的"Windows"。預查不消耗字符,也就是說,在一個匹配發生後,在最後一次匹配之後立即開始下一次匹配的搜索,而不是從包含預查的字符之後開始。
+ 匹配一次或者多次
\. 這裏是匹配小數點,因爲前面加了轉義字符(\)
| 或者
$ 匹配輸入字符串的結束位置
$& 與 regexp 相匹配的子串
再將正則可視化一下吧! 網站 正則可視化
最後用自己的話理解:
\d{1, 3} 匹配1-3位的數字,但是後面必須還得接着 “多個以三位數字爲一組”的字符串,以數字三位數字結尾或者小數點結尾,匹配成功了,就在匹配到的字符串後面加上逗號。
各位道友意覺如何呀,歡迎指導!
參考: