我有一个这样的字符串: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)
答案 0 :(得分:3)
您可以使用正则表达式查找所需的数字,然后重建字符串:
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)");
答案 1 :(得分:1)
您可以执行以下操作:
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)})`
我希望这会有所帮助。
答案 2 :(得分:0)
如果您要尝试不使用正则表达式,则...
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);
答案 3 :(得分:0)
要修剪一些小数位数,请使用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)"