首页 > 解决方案 > 正则表达式查找#aabbcc 格式的十六进制颜色以将它们缩短为#abc

问题描述

我需要匹配#aabbcc 格式的十六进制颜色才能将它们缩短为#abc。这里有些例子:

我以前用过这个/#([0-9A-Fa-f])(?:\1){5}/g匹配前两个,但我也需要第三个匹配。我卡住了,请帮忙:)

标签: regexhex

解决方案


看来你想要

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

并替换为#$1$2$3. 请参阅正则表达式演示

细节

  • #- 一个#字符
  • ([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'));
}


推荐阅读