[英]Trim string to two decimal places
我有一個這樣的字符串: rgba(244.235, 3.234, 3.236, 0.84839234)
如何將最后一個數字的字符串修剪為兩位小數( 0.84
)並刪除其他數字的小數點后的所有內容?
例如:
rgba(244.235, 3.234, 3.236, 0.84839234)
應該:
rgba(244, 3, 3, 0.84)
您可以使用正則表達式來查找您想要的數字,然后重建字符串:
function convert(inputStr) {
const groups = inputStr.match(/\((?<r>[\d]*).*, ?(?<g>[\d]*).*, ?(?<b>[\d]*).*, ?(?<a>[\d]*\.?\d{0,2}).*\)/).groups;
return `rgba(${groups.r}, ${groups.g}, ${groups.b}, ${groups.a})`;
}
// Function call
convert("rgba(244.235, 3.234, 3.236, 0.84839234)");
你可以這樣做:
var string = "rgba(244.235, 3.234, 3.236, 0.84839234)";
var numbers = string.match(/([0-9]*[.])?[0-9]+/g).map(Number);
然后在numbers
數組中,您將擁有這些數字,您可以對它們做任何想做的事情。 首先進行操作,然后將它們連接到您想要的字符串中。
例如:
var newString = `rgba(${Math.floor(numbers[0])}, ${Math.floor(numbers[1])}, ${Math.floor(numbers[2])}, ${numbers[3].toFixed(2)})`
我希望這有幫助。
如果你想在沒有正則表達式的情況下嘗試,那么......
const string = "rgba(244.235, 3.234, 3.236, 0.84839234)";
const rgbaValues = string.substring(string.indexOf('(') + 1, string.length - 1).split(",");
const returnString = `rgba(${parseInt(rgbaValues[0])}, ${parseInt(rgbaValues[1])}, ${parseInt(rgbaValues[2])}, ${parseFloat(rgbaValues[3]).toFixed(2)})`;
console.log(returnString);
要修剪一些小數,請使用toFixed
。 例如
Math.PI;
//=> 3.141592653589793
Math.PI.toFixed(2)
//=> "3.14"
要替換字符串的一部分,請使用replace
。 例如
const reverse_cc = str =>
str.replace(/(\d+)-(\d+)-(\d+)-(\d+)/g,
(ignore, x1, x2, x3, x4) =>
`${x4}-${x3}-${x2}-${x1}`);
reverse_cc("Hey this is my credit card number: 1234-2345-3456-4567");
//=> "Hey this is my credit card number: 4567-3456-2345-1234"
有了這些知識,我們可以構建一個函數來提取rgba(...)
字符串中的數字,處理這些數字並返回一個新字符串:
const rgba_fix = str =>
str.replace(/rgba\(\s*(.*?)\s*,\s*(.*?)\s*,\s*(.*?)\s*,\s*(.*?)\s*\)/,
(ignore, x1, x2, x3, x4) =>
Array.of(
[ Math.round(Number(x1))
, Math.round(Number(x2))
, Math.round(Number(x3))
, Number(x4).toFixed(2)
])
.map(xs => `rgba(${xs.join(', ')})`)
[0]);
rgba_fix('rgba(244.235, 3.234, 3.236 , 0.84839234)');
//=> "rgba(244, 3, 3, 0.85)"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.