日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網(wǎng)站首頁 編程語言 正文

使用replaceAll()方法實現(xiàn)數(shù)字千分位逗號分隔

作者:潮汐未見潮落 更新時間: 2023-04-20 編程語言

前言:

刷題過程中遇到要求把 數(shù)字按照千分位分隔,然后返回字符串,其實在前端開發(fā)中經(jīng)常會遇到這樣的一種需求,使用Javascript格式化數(shù)字進行輸出,本文使用 ES6 的新增方法 replaceAll()來實現(xiàn)這個需求 ,題目描述如下


?replaceAll()方法

replaceAll()方法 是 replace()方法的改進版 ,字符串的實例方法?replace()只能替換第一個匹配 ,如果要替換所有的匹配,不得不使用正則表達式的 /g修飾符進行全局匹配。但是replaceAll()方法,可以一次性替換所有匹配。(如下)

'aabbcc'.replace('b', '_')
// 'aa_bcc'
'aabbcc'.replace(/b/g, '_')
// 'aa__cc'
'aabbcc'.replaceAll('b', '_')
// 'aa__cc'

?replaceAll()方法第二個參數(shù)

replaceAll()的第二個參數(shù)是一個字符串,表示替換的文本,其中可以使用一些特殊字符串。

  • $&:匹配的字符串。
  • $`?:匹配結果前面的文本。
  • $':匹配結果后面的文本。
  • $n:匹配成功的第n組內(nèi)容,n是從1開始的自然數(shù)。這個參數(shù)生效的前提是,第一個參數(shù)必須是正則表達式。
  • $$:指代美元符號$
// $& 表示匹配的字符串,即`b`本身
// 所以返回結果與原字符串一致
'abbc'.replaceAll('b', '$&')
// 'abbc'

// $` 表示匹配結果之前的字符串
// 對于第一個`b`,$` 指代`a`
// 對于第二個`b`,$` 指代`ab`
'abbc'.replaceAll('b', '$`')
// 'aaabc'

// $' 表示匹配結果之后的字符串
// 對于第一個`b`,$' 指代`bc`
// 對于第二個`b`,$' 指代`c`
'abbc'.replaceAll('b', `$'`)
// 'abccc'

// $1 表示正則表達式的第一個組匹配,指代`ab`
// $2 表示正則表達式的第二個組匹配,指代`bc`
'abbc'.replaceAll(/(ab)(bc)/g, '$2$1')
// 'bcab'

// $$ 指代 $
'abc'.replaceAll('b', '$$')
// 'a$c'

?正則表達式(先行斷言)

說這種方法前,我們來了解下什么是先行斷言吧!看例子。(參考 原文鏈接)

有以下字符串:?我愛你 我愛 愛 愛你

如果要取出字,要求這個愛字后面有,這個時候就要這么寫,這就是?先行斷言

'我愛你 我愛 愛 愛你'.match(/愛(?=你)/g) // ["愛", "愛"]

如果要求字后面沒有,那自然也有先行否定斷言

'我愛你 我愛 愛 愛你'.match(/愛(?!你)/g) // ["愛", "愛"] ,因為匹配相同...

這個時候,如果要求字后面有,前面還要有,那就要用到后行斷言了,如下:

'我愛你 我愛 愛 愛你'.match(/(?<=我)愛(?=你)/g) // ["愛"]

最后,如果要求愛字前面沒有我,后面也沒有我,那就要用到先行否定斷言和**后行否定斷言,**如下:

'我愛你 我愛 愛 愛你'.match(/(?<!我)愛(?!你)/g) // ["愛"]

?簡單千分位分隔

使用?replaceAll()方法的第二個參數(shù),代碼簡簡單單就一行完成千分位分隔

 function _comma(number) {    
                return ((number+'').replaceAll(/\d{1,3}(?=(\d{3})+$)/g,'$&,'))
          }

?\d{1,3}? ?表示匹配 1至3 個數(shù)字字符

?=(\d{3})+$? ?表示后面匹配三個數(shù)字字符? $ 表示從行尾匹配

$&? 是?replaceAll()方法的第二個參數(shù),表示與匹配結果一致 ,$&, 表示匹配結果基礎上加上 逗號 ,

?小改進(支持小數(shù))

通過添加 三目運算符判 斷字符串是否存在小數(shù)位, 其他邏輯代碼不變

 // 加入三目運算符判斷小數(shù)
          function _comma(number) {
             
                return !(number + '').includes('.') 
                ? ((number+'').replaceAll(/\d{1,3}(?=(\d{3})+$)/g,'$&,'))+'' 
                : ((number+'').replaceAll(/\d{1,3}(?=(\d{3})+(\.))/g,'$&,'))+''
            }

?console.log(_comma(1234567.36))? ? ? // 1,234,567.36


文章如有錯誤,懇請大家提出問題,本人不勝感激 。 不懂的地方可以評論,我都會一一回復

文章對大家有幫助的話,希望大家能動手點贊鼓勵,大家未來一起努力 ? ? 長路漫漫,道阻且長 ?

原文鏈接:https://blog.csdn.net/qq_52855464/article/details/125582099

欄目分類
最近更新