这是尝试删除字符串中任何多余的空白行。
我试图理解为什么第二种方法不适用于包含空格的行。
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);
答案 0 :(得分:1)
您的\s
需要更改为\\s
。只需添加\s
与s
相同。
在字符串(用引号括起来)中,反斜杠具有特殊含义。例如,\n
是换行符。您可能听过或未听过其他几个,例如: \b
,\t
,\v
。仅使少数定义的特殊元素成为不好的语言设计选择,并将不存在的\s
视为实际的反斜杠和s
,因为它会不一致,是错误的来源,而不是面向未来。这就是为什么当你想在字符串中使用反斜杠时,你将反斜杠转义为\\
。
在第一个示例中,您使用/
个字符来分隔正则表达式。这不被视为受上述规则约束的字符串。