正则表达式替换不能按预期在 nodejs 上工作的换行符

Regex to replace newlines not working on nodejs as intended

我有我在 regex101 上测试过的正则表达式,但是当我在 nodejs 中使用它时,它不会替换换行符。正则表达式是 /([ ]*\n)+/gm。它应该用一个换行符替换多个换行符。代码如下。此代码是我的 vscode 扩展的一部分。有人可以告诉我我做错了什么吗?

function format(str) {
    const regex = /([ ]*\n)+/gm;
    const subst = `\n`;
    const result = str.replace(regex, subst);
    return result;
}

function format(str) {
  const regex = /([ ]*\n)+/gm;
  const subst = `\n`;
  const result = str.replace(regex, subst);
  return result;
}


console.log(format(`abc
      
d

s




  

             

s`));

这个问题很可能与 CRLF 行结尾有关。

您可以使用

str.replace(/(?:\s*\n)+/g, '\n')

请注意,您不需要在此处 m 标记。

查看 JavaScript 演示:

const str = "abc\r\n      \r\nd\r\n\r\ns\r\n\r\n\r\n\r\n\r\n  \r\n\r\n             \r\n\r\ns";
console.log(str.replace(/(?:\s*\n)+/g, '\n'));

const str2 = "abc\n      \nd\n\ns\n\n\r\n\r\n\n  \n\r\n             \n\ns";
console.log(str2.replace(/(?:\s*\n)+/g, '\n'));