У меня есть регулярное выражение, которое я тестировал на регулярное выражение101, однако, когда я использую его в 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.info(format(`abc
d
s
s`));


![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Скорее всего, эта проблема связана с окончаниями строк 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.info(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.info(str2.replace(/(?:\s*\n)+/g, '\n'));
А если использовать
/( *\r?\n)+/g? А как насчет/(?:\s*\n)+/g?