niram
Version:
A javascript library to convert between various css colour formats.
30 lines (29 loc) • 3.41 kB
JavaScript
const REG_EXP_ANY_NUMBER = '([+-]?(?:\\d+|(?:\\d*\\.\\d+)))';
const REG_EXP_HEX = '[a-f\\d]';
const REG_EXP_0_TO_255 = REG_EXP_ANY_NUMBER;
const REG_EXP_N128_TO_127 = REG_EXP_ANY_NUMBER;
const REG_EXP_0_TO_1_FRACTION = REG_EXP_ANY_NUMBER;
const REG_EXP_0_TO_100_PERCENT = `${REG_EXP_ANY_NUMBER}\\%`;
const REG_EXP_0_TO_359_DEG = `${REG_EXP_ANY_NUMBER}(?:deg)?`;
const REG_EXP_0_TO_2_PI_RAD = `${REG_EXP_ANY_NUMBER}rad`;
const REG_EXP_ANGLE = `(?:(?:${REG_EXP_0_TO_359_DEG})|(?:${REG_EXP_0_TO_2_PI_RAD}))`;
const REG_EXP_COMA_OR_SPACE_SEPARATOR = '\\s*[,\\s]\\s*';
const REG_EXP_COMA_SEPARATOR = '\\s*[,]\\s*';
const REG_EXP_SPACE_SEPARATOR = '\\s*[\\s]\\s*';
const REG_EXP_SLASH_SEPARATOR = '\\s*[\\/]\\s*';
export const REG_EXP_MATCH = {
HEX_8: new RegExp(`^\\#(${REG_EXP_HEX}{2})(${REG_EXP_HEX}{2})(${REG_EXP_HEX}{2})(${REG_EXP_HEX}{2})$`, 'i'),
HEX_6: new RegExp(`^\\#(${REG_EXP_HEX}{2})(${REG_EXP_HEX}{2})(${REG_EXP_HEX}{2})$`, 'i'),
HEX_3: new RegExp(`^\\#(${REG_EXP_HEX})(${REG_EXP_HEX})(${REG_EXP_HEX})$`, 'i'),
RGB_COMA: new RegExp(`^rgb\\(\\s*${REG_EXP_0_TO_255}${REG_EXP_COMA_SEPARATOR}${REG_EXP_0_TO_255}${REG_EXP_COMA_SEPARATOR}${REG_EXP_0_TO_255}\\s*\\)$`, 'i'),
RGB_SPACE: new RegExp(`^rgb\\(\\s*${REG_EXP_0_TO_255}${REG_EXP_SPACE_SEPARATOR}${REG_EXP_0_TO_255}${REG_EXP_SPACE_SEPARATOR}${REG_EXP_0_TO_255}\\s*\\)$`, 'i'),
RGBA_COMA: new RegExp(`^rgba\\(\\s*${REG_EXP_0_TO_255}${REG_EXP_COMA_SEPARATOR}${REG_EXP_0_TO_255}${REG_EXP_COMA_SEPARATOR}${REG_EXP_0_TO_255}${REG_EXP_COMA_SEPARATOR}${REG_EXP_0_TO_1_FRACTION}\\s*\\)$`, 'i'),
RGBA_SPACE: new RegExp(`^rgba\\(\\s*${REG_EXP_0_TO_255}${REG_EXP_SPACE_SEPARATOR}${REG_EXP_0_TO_255}${REG_EXP_SPACE_SEPARATOR}${REG_EXP_0_TO_255}${REG_EXP_SLASH_SEPARATOR}${REG_EXP_0_TO_1_FRACTION}\\s*\\)$`, 'i'),
HSL_COMA: new RegExp(`^hsl\\(\\s*${REG_EXP_ANGLE}${REG_EXP_COMA_SEPARATOR}${REG_EXP_0_TO_100_PERCENT}${REG_EXP_COMA_SEPARATOR}${REG_EXP_0_TO_100_PERCENT}\\s*\\)$`, 'i'),
HSL_SPACE: new RegExp(`^hsl\\(\\s*${REG_EXP_ANGLE}${REG_EXP_SPACE_SEPARATOR}${REG_EXP_0_TO_100_PERCENT}${REG_EXP_SPACE_SEPARATOR}${REG_EXP_0_TO_100_PERCENT}\\s*\\)$`, 'i'),
HSLA_COMA: new RegExp(`^hsla\\(\\s*${REG_EXP_ANGLE}${REG_EXP_COMA_SEPARATOR}${REG_EXP_0_TO_100_PERCENT}${REG_EXP_COMA_SEPARATOR}${REG_EXP_0_TO_100_PERCENT}${REG_EXP_COMA_SEPARATOR}${REG_EXP_0_TO_1_FRACTION}\\s*\\)$`, 'i'),
HSLA_SPACE: new RegExp(`^hsla\\(\\s*${REG_EXP_ANGLE}${REG_EXP_SPACE_SEPARATOR}${REG_EXP_0_TO_100_PERCENT}${REG_EXP_SPACE_SEPARATOR}${REG_EXP_0_TO_100_PERCENT}${REG_EXP_SLASH_SEPARATOR}${REG_EXP_0_TO_1_FRACTION}\\s*\\)$`, 'i'),
HWB: new RegExp(`^hwb\\(\\s*${REG_EXP_ANGLE}${REG_EXP_SPACE_SEPARATOR}${REG_EXP_0_TO_100_PERCENT}?${REG_EXP_SPACE_SEPARATOR}${REG_EXP_0_TO_100_PERCENT}?(?:${REG_EXP_SLASH_SEPARATOR}(?:(?:${REG_EXP_0_TO_100_PERCENT})|(?:${REG_EXP_0_TO_1_FRACTION})))?\\s*\\)$`, 'i'),
LAB: new RegExp(`^lab\\(\\s*${REG_EXP_0_TO_100_PERCENT}?${REG_EXP_SPACE_SEPARATOR}${REG_EXP_N128_TO_127}${REG_EXP_SPACE_SEPARATOR}${REG_EXP_N128_TO_127}(?:${REG_EXP_SLASH_SEPARATOR}(?:(?:${REG_EXP_0_TO_100_PERCENT})|(?:${REG_EXP_0_TO_1_FRACTION})))?\\s*\\)$`, 'i'),
LCH: new RegExp(`^lch\\(\\s*${REG_EXP_0_TO_100_PERCENT}?${REG_EXP_SPACE_SEPARATOR}${REG_EXP_0_TO_100_PERCENT}?${REG_EXP_SPACE_SEPARATOR}${REG_EXP_ANGLE}(?:${REG_EXP_SLASH_SEPARATOR}(?:(?:${REG_EXP_0_TO_100_PERCENT})|(?:${REG_EXP_0_TO_1_FRACTION})))?\\s*\\)$`, 'i'),
};