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

在Node.js中合并JavaScript数组内同前缀Token的不同值

解决方案

可以通过分组收集+字符串拼接的方式实现,核心是先提取每个Token的前缀和对应键值,再合并相同前缀的内容,具体实现如下:

步骤说明

  1. 用正则提取每个Token的前缀(如$button-primary-font-color-default:)和内部键值项(如'light':#000)
  2. 用对象存储相同前缀对应的所有键值项
  3. 把收集到的键值项合并,重新拼接成目标格式的字符串

代码实现

const inputTokens = ["$button-primary-font-color-default: ('light':#000);", "$button-primary-font-color-default: ('dark':#fff);"];

// 用于存储前缀和对应键值的映射
const tokenMap = {};

// 匹配Token的正则:分组1是前缀,分组2是括号内的键值内容
const tokenRegex = /^(.*?):\s*\((.*?)\);$/;

inputTokens.forEach(token => {
  const match = token.match(tokenRegex);
  if (match) {
    const prefix = match[1];
    const keyValue = match[2];
    // 若前缀已存在,追加键值;否则初始化数组
    if (tokenMap[prefix]) {
      tokenMap[prefix].push(keyValue);
    } else {
      tokenMap[prefix] = [keyValue];
    }
  }
});

// 把映射转换为目标数组
const outputTokens = Object.entries(tokenMap).map(([prefix, keyValues]) => {
  return `${prefix}: (${keyValues.join(', ')});`;
});

console.log(outputTokens);
// 输出:["$button-primary-font-color-default: ('light':#000, 'dark':#fff);"]

正则解释

/^(.*?):\s*\((.*?)\);$/ 各部分作用:

  • ^:匹配字符串开头
  • (.*?):非贪婪匹配,提取前缀部分(到第一个冒号为止)
  • :\s*:匹配冒号和后面的任意空白字符
  • \((.*?)\):匹配括号内的内容,提取键值项
  • ;$:匹配结尾的分号

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 20:16:10