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

javascript有没有一种方法可以以干净的方式多次清理字符串,javascript,json,replace,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, "")

我正在尝试清理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;
});
{
  '$primary': '#ea80fc',
  '$p_light': '#ffb2ff',
  '$p_dark': '#b64fc8',
  '$secondary': '#b64fc8',
  '$s_light': '#f9683a',
  '$s_dark': '#870000'
}
虽然这个方法确实能以我想要的方式返回“final”,但它似乎效率不高,代码也很笨拙。我的最终目标是删除引号、花括号、将“:”替换为“:”,并将所有逗号改为分号。有没有更好/更干净的方法

编辑: 输入字符串如下所示:

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;
});
{
  '$primary': '#ea80fc',
  '$p_light': '#ffb2ff',
  '$p_dark': '#b64fc8',
  '$secondary': '#b64fc8',
  '$s_light': '#f9683a',
  '$s_dark': '#870000'
}
更简化

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

给定实际数据,其中在
JSON.parse
之后有以下结构:

{
“$primary”:“#ea80fc”,
“$p#u light”:“#ffb2ff”,
“$p#U深色”:“#b64fc8”,
“$secondary”:“b64fc8”,
“$s_light”:“f9683a”,
“$s#U dark”:“#870000”
}
将其转换为合法的SCS根本不需要对JSON字符串应用长链替换。它只需要将JSON解析为纯JS对象,然后迭代键/值以形成SCSS字符串:

函数jsonToSCSS(stringdata=``,data={}){ /*JSON.parse可以抛出。随时准备好*/ 试试{data=JSON.parse(stringdata);} catch(e){console.warn(e);返回`;} 返回Object.keys(数据) .map(key=>`${key}:${data[key]};`) .join('\n'); } 完成了。该函数的输出现在是一个正常的格式化字符串:

$primary:#ea80fc;
$p#U灯:ffb2ff;
$p#u深色:#b64fc8;
$secondary:#b64fc8;
$s#U灯:f9683a;
$s#u深色:87万;
现在,您可以将其直接写入需要写入的任何文件,也可以将其自身包装成格式:

const-SCSS=jsonToSCSS(输入数据);
const qualified=`.someclass{${SCSS}}`;

与“使用替换”不同,您想做什么?也就是说,你为什么要清洗你的绳子?在需要将某些字符(类)替换为空字符串或分号的情况下,您将如何使用它?因为询问如何最好地完成这项工作会得到更好的答案。@Mike'Pomax'Kamerman谢谢你的指点!我的目标是将json字符串转换成可以在scss格式中使用的变量,比如:“变量名:hexcode”(不带引号)后续问题:您的输入字符串数据实际上是什么样的?也就是说,你正在解析的JSON是什么导致你的字符串甚至需要转换,而不是在你的JSON中得到预先格式化的CSS合法字符串?我编辑了这篇文章并包含了我试图解析的JSON。你所说的预先格式化的CSS合法字符串是什么意思?CSS有一个严格的规范,确切地说哪些字符是合法的,在哪些位置,哪些不合法。因此,与一系列替换相比,用一个替换“删除任何不合法的内容”要容易得多。话虽如此:如果这就是您得到的JSON,那么为什么要对整个JSON字符串运行正则表达式呢?最好先使用JSON.parse验证它是合法的JSON(记住
try/catch
!),然后使用类似于
Object.keys(parsed.forEach)(key=>{/*使用key和解析的[key]*/})