Вместо того, чтобы пытаться сопоставить все случаи, которые проходят , а не , я бы просто использовал следующий единственный шаблон для ожидаемого формата, не содержащий пробелов:
rgb\([0-9]+,[0-9]+,[0-9]+\)
Если выКроме того, мы хотели бы утверждать, что все числа находятся в диапазоне от 0 до 255, тогда мы можем изменить вышеприведенное значение на:
rgb\((1?[0-9]{1,2}|2[0-4][0-9]|25[0-5]),(1?[0-9]{1,2}|2[0-4][0-9]|25[0-5]),(1?[0-9]{1,2}|2[0-4][0-9]|25[0-5])\)
Пример кода:
var invalid1 = "rgb(255, 240, 0)";
var invalid2 = "rgb(0,0, 0)";
var invalid3 = "rgb ( 0,12,0)";
var invalid4 = "r gb(12,24,26 )";
var valid = "rgb(10,20,30)";
console.log(/^rgb\([0-9]+,[0-9]+,[0-9]+\)$/.test(invalid1));
console.log(/^rgb\([0-9]+,[0-9]+,[0-9]+\)$/.test(invalid2));
console.log(/^rgb\([0-9]+,[0-9]+,[0-9]+\)$/.test(invalid3));
console.log(/^rgb\([0-9]+,[0-9]+,[0-9]+\)$/.test(invalid4));
console.log(/^rgb\([0-9]+,[0-9]+,[0-9]+\)$/.test(valid));