gpt4 book ai didi

javascript - Node JS 无法在字符串缓冲区上使用多个拆分和 trim 函数

转载 作者:行者123 更新时间:2023-12-03 05:15:14 27 4
gpt4 key购买 nike

我在 Node js 中使用 ffmpeg 并希望获得输出的字符串:

frame=  986 fps=100 q=-1.0 size=N/A time=00:00:39.40 bitrate=N/A speed=4.01x

解析为变量,以便我稍后可以将其查询到 mysql 数据库中,以便稍后排序并显示在数据表上。

问题是 jsfiddle 中的这段代码按预期工作...但是在 Node js 中,当我使用多个拆分和 trim 函数时,我收到此错误:

TypeError: Cannot call method 'split' of undefined
TypeError: Cannot call method 'trim' of undefined

这是我在从 jsfiddle 转换而来的 Node js 上尝试的:

streams[id].stderr.on('data', function(data) {
data = data.toString().split('=');
var frame = data[1].trim().split(' ');
console.log(frame[0]);
});

JSFIDDLE:https://jsfiddle.net/o32z7yb0/

更新#2:使用上面的代码我得到第一个分割字符串我得到这个:

347 fps

那么如何删除 Node js 中的 fps 呢?如果我调用另一个人:

datas[1].split(' fps');

我明白了 类型错误:无法调用未定义的“split”方法

streams[id].stderr.on('data', function(data) {
var datas = data.toString().split('=');

console.log(datas[1]);
});

最佳答案

因此,如果您的数据字符串如下所示:

var str = "frame=  986 fps=100 q=-1.0 size=N/A time=00:00:39.40 bitrate=N/A speed=4.01x";

那么你可能想像这样处理它:

let parts = str

// match will separate it out into an array of pieces
.match(/[a-zA-Z]+\s*=\s*[a-zA-Z\/0-9\.\-:]+/g)

// split each piece on the '=' with optional surrounding whitespace.
.map(str => str.split(/\s*=\s*/)

// put the name/value pairs into an object
.reduce((acc, arr) => {
let prop = arr[0];
let val = arr[1];
acc[prop] = val;
return acc;
}, {});

console.log(parts); // { "frame": "896", "fps": "100", ...etc }

正则表达式说明:

[a-zA-Z]+ // match any letter one or more times
\s* // match any whitespace char zero or more times
= // match =
\s* // same as above
[
a-zA-Z // match any letter
0-9 // any number
\/\.\-: // . : / any of those three
]+ // ... one or more times
g flag // get all matches

关于javascript - Node JS 无法在字符串缓冲区上使用多个拆分和 trim 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41635630/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com