在Node.js中合并JavaScript数组内同前缀Token的不同值
解决方案
可以通过分组收集+字符串拼接的方式实现,核心是先提取每个Token的前缀和对应键值,再合并相同前缀的内容,具体实现如下:
步骤说明
- 用正则提取每个Token的前缀(如
$button-primary-font-color-default:)和内部键值项(如'light':#000) - 用对象存储相同前缀对应的所有键值项
- 把收集到的键值项合并,重新拼接成目标格式的字符串
代码实现
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
相关产品推荐
相关产品推荐

