Javascript 如何使fs.readFile仅返回作用域内的行?
我使用Javascript 如何使fs.readFile仅返回作用域内的行?,javascript,node.js,scope,Javascript,Node.js,Scope,我使用fs.readFile并抛出数据并获取所有文件行,现在我只需要获取内部作用域的行{} 代码如下: //index.js const fs = require('fs'); fs.readFile(process.argv[2], (err, data) => { if (err) throw err; console.log(`${data}`) }); //app.scss .app { color: black; .a { margin:
fs.readFile
并抛出数据
并获取所有文件行,现在我只需要获取内部作用域的行{}
代码如下:
//index.js
const fs = require('fs');
fs.readFile(process.argv[2], (err, data) => {
if (err) throw err;
console.log(`${data}`)
});
//app.scss
.app {
color: black;
.a {
margin: 10px;
}
}
用法
node index.js <CSS file directory> //dummy example
node index.js app.scss //real example
预期结果
color: black;
margin: 10px;
但是这里的
数据是所有文件行,我只需要返回行内部作用域,有什么帮助吗?创建一个函数,接收文件的所有行,使用换行符(\n
)进行拆分,以便我们可以逐行检查,现在我们只添加一组验证,以了解何时连接和何时不连接
我留下这个函数操作的例子,它返回一个数组和一个字符串,我这样做是因为我不知道您需要以什么方式输出。我希望它对你有用
// index.js
const fs = require('fs');
function getData(data) {
let countOpenCurlyBraces = 0;
let concatenate = null;
let stringRes = '';
const arrRes = [];
const arr = data.split('\n');
arr.forEach((element) => {
if (countOpenCurlyBraces == 0) {
concatenate = false;
}
if (element.includes('{')) {
countOpenCurlyBraces++;
concatenate = true;
return;
}
if (element.includes('}')) {
countOpenCurlyBraces--;
return;
}
if (concatenate) {
arrRes.push(element.trim());
stringRes += element.trim() + '\n';
}
});
return {
arrRes,
stringRes
};
}
fs.readFile(process.argv[2], "utf8", (err, data) => {
if (err) throw err;
console.log(getData(data).stringRes);
});
// app.scss
//all file lines will print in console
.app {
color: black;
.a {
margin: 10px;
}
}
结果:
color: black;
margin: 10px;
var行=”;data.split('\n').forEach(函数(行){if(line.indexOf('{')<0)line+=line+'\n'});
因此按\n
新行字符分割数据,并检查该行是否包含{
@MoldaTypeError:data.split不是一个函数
显示此错误您需要一个javascript css解析器来实现各种css文件所需的功能。另一方面,如果您事先知道要读取的css文件的结构,您可以使用简单的正则表达式匹配来完成它。这很好,但请你能像我用nodejs那样从.css
文件中获取数据吗?当然,我只是想知道你是否想在终端上打印答案?我已经将所有内容一起更新了我的答案,我希望这是你需要的。
color: black;
margin: 10px;