Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/380.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 从子进程输出字符串中提取变量_Javascript_Node.js - Fatal编程技术网

Javascript 从子进程输出字符串中提取变量

Javascript 从子进程输出字符串中提取变量,javascript,node.js,Javascript,Node.js,我正在构建一个使用子进程进行数学计算的应用程序: var child = exec('get_hrv -M -R rr.txt', function(error, stdout) { if (error !== null) { console.log('exec error: ' + error); } else { res.send(stdout); } }); 输出(stdout)如下所示: NN/RR = 0.9

我正在构建一个使用子进程进行数学计算的应用程序:

var child = exec('get_hrv -M -R rr.txt', function(error, stdout) {
    if (error !== null) {
        console.log('exec error: ' + error);
    } else {
        res.send(stdout);       
    }
});
输出(stdout)如下所示:

NN/RR    = 0.992424
AVNN     = 789.443
SDNN     = 110.386
SDANN    = 0
SDNNIDX  = 110.386
rMSSD    = 73.5775
pNN50    = 36.9231
TOT PWR  = 12272.8
ULF PWR  = 788.161
VLF PWR  = 4603.59
LF PWR   = 4221.97
HF PWR   = 2659.05
LF/HF    = 1.58777
var extractedVars = {
    NN/RR: 0.992424
    AVNN: 789.443
    SDNN: 110.386
    SDANN: 0
    SDNNIDX: 110.386
    rMSSD: 73.5775
    pNN50: 36.9231
    TOT PWR: 12272.8
    ULF PWR: 788.161
    VLF PWR: 4603.59
    LF PWR: 4221.97
    HF PWR: 2659.05
    LF/HF: 1.58777
}
一切正常,但是,此输出是一个字符串,我需要将其包含的值分配给单独的整数变量,例如:

NN/RR    = 0.992424
AVNN     = 789.443
SDNN     = 110.386
SDANN    = 0
SDNNIDX  = 110.386
rMSSD    = 73.5775
pNN50    = 36.9231
TOT PWR  = 12272.8
ULF PWR  = 788.161
VLF PWR  = 4603.59
LF PWR   = 4221.97
HF PWR   = 2659.05
LF/HF    = 1.58777
var extractedVars = {
    NN/RR: 0.992424
    AVNN: 789.443
    SDNN: 110.386
    SDANN: 0
    SDNNIDX: 110.386
    rMSSD: 73.5775
    pNN50: 36.9231
    TOT PWR: 12272.8
    ULF PWR: 788.161
    VLF PWR: 4603.59
    LF PWR: 4221.97
    HF PWR: 2659.05
    LF/HF: 1.58777
}

如何做到这一点?Regex?

你可以试试这样的东西

var lines = dataFromProc.split(require('os').EOL);
var data = {};
lines.forEach(function (line) {
    var parts = line.split('=');
    if (parts[1]) {
        data[parts[0].trim()] = parseFloat(parts[1].trim());
    }
});
console.log(data);

既然您提到了正则表达式,我就用regexp编写了一个解决方案。我不确定我是否会使用这个解决方案,因为其他解决方案可能更容易阅读,但不管怎样,它还是在这里。密钥进入捕获组0,值进入组1

var regexp = /([0-9A-Za-z\/ ?]*)= ([0-9\.]*)/;
var extractedVars = {}
data.split(os.EOL).forEach(function (line) {
    var res = regexp.exec(line);
    extractedVars[res[1].trim()] = parseFloat(res[2]);
});

上的表达式是生成您的输出的代码吗?不,我使用的是Physionet HRV Toolkit()中的shell脚本。这假设换行是CRLF(
“\r\n”
)。假设
get\u hrv
使用平台的EOL字符,
require('os')。EOL
将更真实。看看你的解决方案和其他解决方案在性能方面有什么不同吗?看起来至少在chrome上regex one要快一点,尽管它可能不值得读更难的代码。