删除多余的空白行

时间:2018-04-22 13:42:23

标签: javascript regex

这是尝试删除字符串中任何多余的空白行。

我试图理解为什么第二种方法不适用于包含空格的行。

Demo

var string = `
    foo



    bar (there are whitespaced lines between bar and baz. I replaced them with dots)
    ....................
    .......................
    ...........           
    baz
`;

// It works
string = string.replace(/^(\s*\n){2,}/gm, '\n');

// Why it doesn't work?
var EOL = string.match(/\r\n/gm) ? '\r\n' : '\n';
var regExp = new RegExp('^(\s*' + EOL + '){2,}', 'gm');
string = string.replace(regExp, EOL);

alert(string);

1 个答案:

答案 0 :(得分:1)

您的\s需要更改为\\s。只需添加\ss相同。

在字符串(用引号括起来)中,反斜杠具有特殊含义。例如,\n是换行符。您可能听过或未听过其他几个,例如: \b\t\v。仅使少数定义的特殊元素成为不好的语言设计选择,并将不存在的\s视为实际的反斜杠和s,因为它会不一致,是错误的来源,而不是面向未来。这就是为什么当你想在字符串中使用反斜杠时,你将反斜杠转义为\\

在第一个示例中,您使用/个字符来分隔正则表达式。这不被视为受上述规则约束的字符串。