例如,"1.00200" => "1.002"
可以將小數字串轉型成數字,後面的零會自動去除。
如果不想轉成數字,可以用正規表達式處理:
- 「\.0*$」:符合 ".0"、".00"、".000"....這類的字串尾,找出來,去除。
- 「(\.\d*[1-9])0+$」:符合".10"、".010"、".0100"、".100100000"....這類的字串尾,找出來,去除後面連續的"0",並將前面小數點「.」到最後一個不是「0」的部分,保留暫存為第一個變數「$1」。
- 用OR將兩者綜合起來:
- 小數字串.replace(/\.0*$|(\.\d*[1-9])0+$/, '$1')
- 第一個條件「\.0*$」,沒用「()」小括號紀錄符合的部分,所以沒有$1的值,效果猶如直接去除符合的部分。
(如果這個條件也用了小括號儲存變數,連後面第二個條件的小括號,整個比對樣式共有兩個小括號,會變成第一個括號為$1,第二個括號為$2) - 第二個條件「(\.\d*[1-9])0+$」用「()」小括號將符合的字串範圍中,要保留的部分存成$1變數,整個符合範圍用$1取代。
/** * 去除小數字串後面多餘的零 * @param {String} num_str * @returns {String} */ var removeFloatTrailingZero = function (num_str) { //new String("test"),typeof 是 object,所以多一個 instanceof 判斷 if (typeof num_str === "string" || num_str instanceof String) { //字串 } else { //避免隨意傳入非字串變數,導致後面replace()出錯 num_str = String(num_str);//null、undefined 不能用 toString() } return num_str.replace(/\.0*$|(\.\d*[1-9])0+$/, '$1'); };
Regular Expression 取代效果:
https://regex101.com/r/l4FOO8/1/
測試字串:
0 0.0 0.00 1.0 10.00 100 200.010 200.01023000 200.100 200.1002去除符合樣式,保留$1的最終結果:
0 0 0 1 10 100 200.01 200.01023 200.1 200.1002
其他:
若改成用「#$1」取代
數字字串.replace(/\.0*$|(\.\d*[1-9])0+$/, '#$1'),
可較清晰的觀察比對樣式條件OR、變數$1的取代邏輯。
沒有留言:
張貼留言