Я сделал регулярное выражение, которое проверяет значения rgb () и rgba (). Он проверяет наличие трех кортежей от 0 до 255, а затем необязательное десятичное число от 0 до 1 для прозрачности. TLDR;
rgba?\(((25[0-5]|2[0-4]\d|1\d{1,2}|\d\d?)\s*,\s*?){2}(25[0-5]|2[0-4]\d|1\d{1,2}|\d\d?)\s*,?\s*([01]\.?\d*?)?\)
Разбит на части, которые у нас есть:
rgba?\( // Match rgb( or rgba( as the a is optional
0-255 соответствует чередованию:
\d\d? // Match 0-99
1\d\d // Match 100 - 199
2[0-4]\d // Match 200-249
25[0-5] // Match 250 - 255
Обработка запятой и пробелов вокруг кортежей 0-255 занимает некоторое пространство. Я сопоставляю 0-255 кортежей с обязательной запятой и дополнительными пробелами дважды
(25[0-5]|2[0-4]\d|1([0-9]){1,2}|\d\d?)\s*,\s*){2}
Затем кортеж 0-255 с необязательной запятой и пробелом для учета значений rgb () без запятой
(25[0-5]|2[0-4]\d|1([0-9]){1,2}|\d\d?),?\s*
Затем следует необязательный 0-1 как целое или десятичное число:
([01]\.?\d*?)? // 0 or 1 needed, dot and decimal numbers optional
И мы заканчиваем закрывающей скобкой
\)