Regex, чтобы найти шестнадцатеричные цвета в формате #aabbcc, чтобы сократить их до #abc - PullRequest
0 голосов
/ 05 июля 2018

Мне нужно сопоставить шестнадцатеричные цвета в формате #aabbcc, чтобы можно было сократить их до #abc. Вот несколько примеров:

  • #333333 - совпадение
  • #666666 - совпадение
  • #ff6666 - совпадение
  • #ffaacc - матч
  • #d7d7d7 - не соответствует
  • #e5e5e5 - не соответствует

Я использовал это ранее /#([0-9A-Fa-f])(?:\1){5}/g, которое соответствовало первым двум, но мне также нужен третий матч. Я застрял, пожалуйста, помогите:)

Ответы [ 2 ]

0 голосов
/ 05 июля 2018

Ваше предыдущее решение соответствует одной шестнадцатеричной цифре, а затем одна и та же цифра , 5 раз.

Теперь вы должны сопоставить также одну шестнадцатеричную цифру, затем ту же самую одну шестнадцатеричную цифру (группа 1). Все это следует повторить 3 раза, но с изменением номера переданная группа захвата.

Так что вы можете использовать /#([\dA-F])\1([\dA-F])\2([\dA-F])\3\b/gi

Другие изменения в вашем решении:

  • \d вместо 0-9,
  • [A-Z] с опцией i, поэтому a-z не требуется.
  • граница слова в конце, чтобы «блокировать», например, более длинные последовательности шестнадцатеричных цифр.
  • не требующие захвата группы не нужны.
0 голосов
/ 05 июля 2018

Кажется, вы хотите

/#([0-9a-f])\1([0-9a-f])\2([0-9a-f])\3/gi

и заменить на #$1$2$3. Смотрите regex demo .

Подробнее

  • # - # char
  • ([0-9a-f]) - Группа 1: шестнадцатеричный символ
  • \1 - обратная ссылка на значение группы 1
  • ([0-9a-f])\2 - группа 2, соответствующая шестнадцатеричному символу и обратной ссылке на значение группы 2
  • ([0-9a-f])\3 - группа 3, соответствующая шестнадцатеричному символу и обратной ссылке на значение группы 3

Демо-версия:

var strs = ['#333333','#666666','#ff6666','#d7d7d7','#e5e5e5'];
var rx = /#([0-9a-f])\1([0-9a-f])\2([0-9a-f])\3/gi;
for (var s of strs) {
  console.log(s, "=>", s.replace(rx, '#$1$2$3'));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...