en.javascript.info/10-regular-expressions-javascript/06-regexp-quantifiers/2-find-html-colors-6hex/solution.md
Ilya Kantor e2443e8de6 ok
2017-03-19 16:59:53 +03:00

1.4 KiB
Raw Blame History

Итак, нужно написать выражение для описания цвета, который начинается с "#", за которым следуют 6 шестнадцатеричных символов.

Шестнадцатеричный символ можно описать с помощью pattern:[0-9a-fA-F]. Мы можем сократить выражение, используя не чувствительный к регистру шаблон pattern:[0-9a-f].

Для его шестикратного повторения мы будем использовать квантификатор pattern:{6}.

В итоге, получаем выражение вида pattern:/#[a-f0-9]{6}/gi.

var re = /#[a-f0-9]{6}/gi;

var str = "color:#121212; background-color:#AA00ef bad-colors:f#fddee #fd2";

alert( str.match(re) );  // #121212,#AA00ef

Проблема этого выражения в том, что оно находит цвет и в более длинных последовательностях:

alert( "#12345678".match( /#[a-f0-9]{6}/gi ) ) // #12345678

Чтобы такого не было, можно добавить в конец \b:

// цвет
alert( "#123456".match( /#[a-f0-9]{6}\b/gi ) ); // #123456

// не цвет
alert( "#12345678".match( /#[a-f0-9]{6}\b/gi ) ); // null