Trim 字符串保留两位小数
Trim string to two decimal places
我有这样一个字符串:rgba(244.235, 3.234, 3.236, 0.84839234)
如何 trim 将最后一个数字的字符串保留到小数点后两位 (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);
对trim小数点后几位使用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(...)
字符串中的数字,处理这些数字和 returns 一个新字符串:
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)"
我有这样一个字符串:rgba(244.235, 3.234, 3.236, 0.84839234)
如何 trim 将最后一个数字的字符串保留到小数点后两位 (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);
对trim小数点后几位使用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(...)
字符串中的数字,处理这些数字和 returns 一个新字符串:
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)"