[英]javascript is there a way to clean up a string multiple times in a clean way
我正在尝试清理 JSON 字符串(从 json 对象转换而来),我发现很多人使用 .replace() 方法来执行此操作。 但是,这样做时我的代码如下所示:
scrape(url).then(result => {
final = JSON.stringify(result);
final = final.replace(/['"]+/g, "");
final = final.replace(/[{]+/g, "");
final = final.replace(/[}]+/g, "");
final = final.replace(/[:]+/g, ": ");
final = final.replace(/,+/g, ";");
return final;
});
虽然这种方法确实可以按照我想要的方式返回“final”,但它似乎效率不高,而且代码也很笨拙。 我的最终目标是删除引号、大括号、用 ':' 替换 ':' 并将所有逗号更改为分号。 有没有更好/更清洁的方法来做到这一点?
编辑:输入字符串看起来像这样:
{
'$primary': '#ea80fc',
'$p_light': '#ffb2ff',
'$p_dark': '#b64fc8',
'$secondary': '#b64fc8',
'$s_light': '#f9683a',
'$s_dark': '#870000'
}
给定您的实际数据,在JSON.parse
之后,您具有以下结构:
{
'$primary': '#ea80fc',
'$p_light': '#ffb2ff',
'$p_dark': '#b64fc8',
'$secondary': '#b64fc8',
'$s_light': '#f9683a',
'$s_dark': '#870000'
}
将其转换为合法的 SCSS 根本不需要对 JSON 字符串应用一长串替换。 它只需要将 JSON 解析为纯 JS 对象,然后迭代键/值以形成 SCSS 字符串:
function jsonToSCSS(stringdata=``, data={}) {
/* JSON.parse can throw. Always be ready for that. */
try { data = JSON.parse(stringdata); }
catch (e) { console.warn(e); return ``; }
return Object.keys(data)
.map(key => `${key}: ${data[key]};`)
.join('\n');
}
并做了。 该函数的输出现在是一个正常的格式化字符串:
$primary: #ea80fc;
$p_light: #ffb2ff;
$p_dark: #b64fc8;
$secondary: #b64fc8;
$s_light: #f9683a;
$s_dark: #870000;
您现在可以将其写入需要写入的任何文件,可以直接写入,也可以将其本身包装在格式中:
const SCSS = jsonToSCSS(inputdata);
const qualified = `.someclass { ${SCSS} }`;
更简单
scrape(url).then(result => {
return JSON.stringify(result.replace(/['"{}]+/g, "").replace(/[:]+/g, ":").replace(/,+/g, ";"));
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.