Это должно соответствовать любому синтаксису #rgb
, #rgba
, #rrggbb
и #rrggbbaa
:
/^#(?:(?:[\da-f]{3}){1,2}|(?:[\da-f]{4}){1,2})$/i
сломаться:
^ // start of line
# // literal pound sign, followed by
(?: // either:
(?: // a non-capturing group of:
[\da-f]{3} // exactly 3 of: a single digit or a letter 'a'–'f'
){1,2} // repeated exactly 1 or 2 times
| // or:
(?: // a non-capturing group of:
[\da-f]{4} // exactly 4 of: a single digit or a letter 'a'–'f'
){1,2} // repeated exactly 1 or 2 times
)
$ // end of line
i // ignore case (let 'A'–'F' match 'a'–'f')
Обратите внимание, что вышеприведенное не эквивалентно этому синтаксису, что неверно:
/^#(?:[\da-f]{3,4}){1,2}$/i
Это позволит группе из 3 следовать группу из 4, например #1234567
, которая не является допустимым шестнадцатеричным цветом.