繁体   English   中英

javascript有没有办法以干净的方式多次清理字符串

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM