Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/429.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使fs.readFile仅返回作用域内的行?_Javascript_Node.js_Scope - Fatal编程技术网

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
新行字符分割数据,并检查该行是否包含
{
@Molda
TypeError:data.split不是一个函数
显示此错误您需要一个javascript css解析器来实现各种css文件所需的功能。另一方面,如果您事先知道要读取的css文件的结构,您可以使用简单的正则表达式匹配来完成它。这很好,但请你能像我用nodejs那样从
.css
文件中获取数据吗?当然,我只是想知道你是否想在终端上打印答案?我已经将所有内容一起更新了我的答案,我希望这是你需要的。
color: black;
margin: 10px;