This question already has answers here:
Why do regex constructors need to be double escaped?
(5个答案)
2年前关闭。
这是尝试删除字符串中多余的空行。
我试图理解为什么第二种方法对包含空格的行不起作用。
Demo。
(5个答案)
2年前关闭。
这是尝试删除字符串中多余的空行。
我试图理解为什么第二种方法对包含空格的行不起作用。
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);
最佳答案
您的\s
需要更改为\\s
。仅放入\s
与s
相同。
在字符串中(用引号引起来),反斜杠具有特殊含义。例如,\n
是换行符。您可能听说过或听不到其他一些信息,例如\b
,\t
,\v
。仅使几个已定义的特殊字符成为错误的语言设计选择,并认为不存在的\s
是实际的反斜杠和s
,因为这将导致不一致,这是错误的来源,而不是将来-证明。这就是为什么当您想在字符串中包含反斜杠时,将反斜杠转义为\\
的原因。
在第一个示例中,使用/
字符分隔正则表达式。这不视为受以上规则约束的字符串。
关于javascript - 删除多余的空行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49966580/
10-11 18:07