JavaScript中解析含值内逗号的键值对字符串的方法问询
解法思路
该字符串的键值对分隔符存在明确可区分的特征:两个独立键值对之间的, (英文逗号+空格)后面一定紧跟由英文/数字组成的键名,而值内部包含的英文逗号后面不会出现英文开头的键名,仅会跟着俄文/数字。利用该特征通过正则直接捕获所有键值对即可避开值内部逗号的干扰。
实现代码
// 原始待解析字符串 const rawStr = '{access=Свободный, superviser=Ромашкина Яна Витальевна, Spname=Классы Э-2, Э-3, Э-4, name=Эмоции и новая политическая культура, format=Дискуссия, project=Школа эмоционального здоровья, finishDate=09.ноя.2021 22:45, href=Doc?k=Ev&id=d50ed0941c79cf06b917915daaas34bd9aeaf1g8h8f77c32c5d1cea615e25f7721b8a9af0c08157c4f7c548aaaf293ec2dfd410425a4c8fa4314aeec302c8f82470098, Tp=Learning, startDate=09.ноя.2021 18:00, produser=Иванонв Иван Иванович}'; // 去掉首尾的大括号 const content = rawStr.slice(1, -1); // 正则规则:匹配键(英文、数字组成),匹配=,捕获值直到遇到下一个「英文逗号+空格+英文字母」或者字符串结尾 const keyValueReg = /([a-zA-Z0-9]+)=([\s\S]*?)(?=, [a-zA-Z]|$)/g; const result = {}; let matchRes; while ((matchRes = keyValueReg.exec(content)) !== null) { const key = matchRes[1]; // 去除值首尾多余空格 const value = matchRes[2].trim(); result[key] = value; } console.log(result);
效果验证
执行上述代码后可得到完整正确的键值对,比如Spname对应的取值为完整的Классы Э-2, Э-3, Э-4,不会被内部的逗号拆分。如果实际场景中键名包含下划线等其他字符,调整正则中键的匹配规则即可,比如将([a-zA-Z0-9]+)改为([a-zA-Z0-9_]+)。
内容的提问来源于stack exchange,提问作者therainreihhail
相关产品推荐
相关产品推荐

