javascript有一种方法可以以一种干净的方式多次清理一个字符串

时间:2020-02-03 04:33:46

标签: javascript json replace

我试图清理一个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'
}

2 个答案:

答案 0 :(得分:2)

给出实际数据,在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} }`;

答案 1 :(得分:1)

更简化

scrape(url).then(result => {
  return JSON.stringify(result.replace(/['"{}]+/g, "").replace(/[:]+/g, ":").replace(/,+/g, ";"));
});