You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

正则表达式自定义条件:提取字符串中#后3/6位的颜色代码

提取符合#XXX;或#XXXXXX;格式的颜色代码(自动处理非标准长度)

我来帮你搞定这个正则表达式需求!首先咱们明确核心要求:要从字符串里揪出以#开头、后面跟着3位或6位十六进制字符、最后以;结尾的颜色代码;如果#后面的字符长度不是3或6,就截断到最近的有效长度(比如4位取前3位,7位取前6位)。

正则表达式方案

这里分两种场景,你可以根据实际需求选择:

场景1:仅提取严格符合3/6位格式的代码

如果你只想保留完全匹配#XXX;或#XXXXXX;的代码,直接用这个正则就能精准捕获:

#([0-9A-Fa-f]{3}|[0-9A-Fa-f]{6});
  • 细节解释:
    • #:匹配开头的#符号
    • ([0-9A-Fa-f]{3}|[0-9A-Fa-f]{6}):捕获组,仅匹配3位或6位十六进制字符(支持0-9、大小写A-F)
    • ;:匹配结尾的分号

场景2:自动截断非标准长度,提取有效部分

如果遇到#1234;(4位)想提取#123;,#1234567;(7位)想提取#123456;,可以先用下面的正则捕获所有#后1-6位的十六进制字符,再通过代码处理截断逻辑:

#([0-9A-Fa-f]{1,6});

举个JavaScript的实现示例:

const str = "这里有#12;、#123;、#12345;、#123456;、#abcdef;、#abcd;";
const regex = /#([0-9A-Fa-f]{1,6});/g;
let match;
const validColors = [];

while ((match = regex.exec(str)) !== null) {
  let code = match[1];
  // 按规则截断:长度超6取前6位,超3取前3位
  if (code.length > 6) {
    code = code.slice(0, 6);
  } else if (code.length > 3) {
    code = code.slice(0, 3);
  }
  // 只保留3或6位的有效结果
  if (code.length === 3 || code.length === 6) {
    validColors.push(`#${code};`);
  }
}

console.log(validColors); // 输出:["#123;", "#123;", "#123456;", "#abcdef;", "#abc;"]

关键细节补充

  • 十六进制兼容:[0-9A-Fa-f]确保大小写的颜色代码(比如#FFF;和#fff;)都能被匹配到
  • 截断逻辑可调整:如果你对不足3位的代码(比如#12;)有特殊处理需求,只需要修改代码里的判断条件即可

内容的提问来源于stack exchange,提问作者Sviat Kuzhelev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 08:59:47