javascript有没有一种方法可以以干净的方式多次清理字符串
我正在尝试清理JSON字符串(从JSON对象转换而来),我发现很多人都使用.replace()方法来清理。但是,这样做时,我的代码如下所示: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, "")
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]*/})代码>?