попробуйте это:
var rgbString = "rgb(0, 70, 255)"; // get this in whatever way.
var parts = rgbString.match(/^rgb\((\d+),\s*(\d+),\s*(\d+)\)$/);
// parts now should be ["rgb(0, 70, 255", "0", "70", "255"]
delete (parts[0]);
for (var i = 1; i <= 3; ++i) {
parts[i] = parseInt(parts[i]).toString(16);
if (parts[i].length == 1) parts[i] = '0' + parts[i];
}
var hexString ='#'+parts.join('').toUpperCase(); // "#0070FF"
В ответ на вопрос в комментариях ниже:
Я пытаюсь изменить регулярное выражение для обработки как rgb, так и rgba, в зависимости от того, какое из них я получу. Есть намеки? Благодарю.
Я не совсем уверен, имеет ли это смысл в контексте этого вопроса (поскольку вы не можете представить цвет rgba в шестнадцатеричном формате), но я думаю, что могут быть другие варианты использования. В любом случае, вы можете изменить регулярное выражение так:
/^rgba?\((\d+),\s*(\d+),\s*(\d+)(?:,\s*(0\.\d+))?\)$/
Пример вывода:
var d = document.createElement('div');
d.style.backgroundColor = 'rgba( 255, 60, 50, 0)';
/^rgba?\((\d+),\s*(\d+),\s*(\d+)(?:,\s*(1|0\.\d+))?\)$/.exec(d.style.backgroundColor);
// ["rgba(255, 60, 50, 0.33)", "255", "60", "50", "0.33"]