节点 .replace() 仅有时起作用

Node .replace() only works sometimes

提问人:nanohard 提问时间:10/13/2023 最后编辑:nanohard 更新时间:10/24/2023 访问量:76

问:

当我尝试删除行尾时,它只在大约 75% 的时间内起作用,而在其他时间则不起作用。我尝试了多种排列来达到相同的效果;也就是说,有时,它仍然会包含 .为什么会发生这种情况,我能做些什么来让它一直工作,而不仅仅是偶尔?.replace()\n

const transformStream = new stream.Transform({
  transform: (chunk, encoding, callback) => {
    const data = chunk.toString()
      // remove line endings from stream, making one long line
      .replace(/(\n)|(\r)|(\\")|(\\\\)|(\\n)|(\\r)/gm, "");
    callback(null, data);
  }
});

我尝试了以下方法:

  • .replace(/[\n\r]/g)
  • .replace(/[\n\r]|(\n)|(\r)|(\\n)|(\\r)/g)

以及其他类似的变化,但到目前为止还没有达到预期的结果。

编辑:

这是 Postgres 抱怨的一段数据(我们正在将数据流式传输到 Postgres)。实际文件是 101MB,出于隐私原因我无法上传。

{
  result: 'There was a problem with the JSON content.',
  message: 'invalid input syntax for type json',
  detail: 'Character with value 0x0a must be escaped.',
  where: 'JSON data, line 1: ...rice_level"}},"barcodes":[],"id":"i0","name":"Rum\n'
}

我在这里错过了什么?我们用 替换 和 . 再说一次,如果我第二次运行它,它通常会毫无问题地通过。如果没有,我只是继续运行它,最终它会通过。replace()\n\\n

JavaScript 节点.js 正则表达式 PostgreSQL 替换

评论

6赞 Konrad 10/13/2023
显示它不起作用的输入
0赞 eekinci 10/24/2023
您是否尝试拆分您的 to(窗口)和(空字符串)以及(换行符和回车符)等等......这样你将拥有:replacesreplace(/\r\n/g, "\n")replace(/\r/g, '')replace(/\\n/g, '\n').replace(/\\r/g, '')const data = chunk.toString().replace(..).replace(..).replace(..)
0赞 eekinci 10/24/2023
因为如果它有时会发生,那么我敢肯定这可能是由于行尾字符的变化或数据中的意外字符。
1赞 Wyck 10/24/2023
流块没有义务不被拆分到您正在寻找的连续多字符序列的中间。例如,如果您希望找到第一个块可能以结尾,而下一个块可能以表示您未能在任一块中找到,但块的串联序列包含 .这将损害您可靠地定位两个字符序列的能力。abababab
0赞 Wyck 10/24/2023
看起来您正在尝试直接转换 JSON 文本(以 JSON 格式编码的结构化数据),这与尝试转换编码的结构化数据有根本的不同。最好对 JSON 进行解码,然后转换要转换的任何字符串数据,然后重新编码回 JSON。这样你就不会破坏任何转义序列。

答: 暂无答案