我正在尝试解决如何将以下十六进制字符串拆分为成对数字的数组。
目前我有以下内容:
function getRGB(hexVal) {
var substrHexVal = hexVal.substring(1,hexVal.length);
var splitHexVal = substrHexVal.split("");
return splitHexVal;
}
var a = getRGB("#00FF00");
a;
返回以下内容:
["0", "0", "F", "F", "0", "0"]
但我需要解决这个问题:
["00", "FF", "00"]
可能很明显我想做什么,但我想自己做其余的事。
答案 0 :(得分:10)
拥抱功能方面的力量,卢克
a="#c0ffee"
"#c0ffee"
[1,3,5].map(function(o) {return a.slice(o,o+2)})
["c0", "ff", "ee"]
答案 1 :(得分:3)
您可能希望传递字符串,并用逗号分隔对。最后在逗号上分割字符串:
function getRGB(hexVal) {
var commaSeperated = '';
// Removes the first character from the input string
hexVal = hexVal.substring(1, hexVal.length);
// Now let's separate the pairs by a comma
for (var i = 0; i < hexVal.length; i++) {
// Iterate through each char of hexVal
// Copy each char of hexVal to commaSeperated
commaSeperated += hexVal.charAt(i);
// After each pair of characters add a comma, unless this
// is the last char
commaSeperated += (i % 2 == 1 && i != (hexVal.length - 1)) ? ',' : '';
}
// split the commaSeperated string by commas and return the array
return commaSeperated.split(',');
}
console.log(getRGB("#00FF00")); // ["00", "FF", "00"]
答案 2 :(得分:2)
function getRGB(hexVal) {
return hexVal.toUpperCase().match(/[0-9A-F]{2}/g);
}
取字符串,将其转换为大写,并使用简单的正则表达式提取所有十六进制对。大写转换不是绝对必要的,但它确保您的十六进制对是一致的。您可以轻松地将字母字符全部小写(注意正则表达式的“A-F”部分现在是“a-f”):
function getRGB(hexVal) {
return hexVal.toLowerCase().match(/[0-9a-f]{2}/g);
}
或者,如果你只是不在乎,那么你可以使用“i”修饰符使你的正则表达式不敏感:
function getRGB(hexVal) {
return hexVal.match(/[0-9a-f]{2}/gi);
}
此外,请注意,这些功能都不能确保您获得3对。如果您将“_?!@#$#00FF00FF”传递给它,您将获得[“00”,“FF”,“00”,“FF”]。同样,如果你传递“00FF0”,你会得到[“00”,“FF”]因为只找到了2对完整的对。
换句话说,您需要添加一些错误检查。
答案 3 :(得分:1)
function parseHexColor(colorVal) {
var regex = /^#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/i;
colorVal = colorVal.replace(regex,"$1,$2,$3");
return colorVal.split(",");
}
显然你想要测试虚假值等等,你可以用线来缩短它,但这是获得你想要的一种简单方法。