This question already has answers here:
Why do regex constructors need to be double escaped?
                            
                                (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。仅放入\ss相同。

在字符串中(用引号引起来),反斜杠具有特殊含义。例如,\n是换行符。您可能听说过或听不到其他一些信息,例如\b\t\v。仅使几个已定义的特殊字符成为错误的语言设计选择,并认为不存在的\s是实际的反斜杠和s,因为这将导致不一致,这是错误的来源,而不是将来-证明。这就是为什么当您想在字符串中包含反斜杠时,将反斜杠转义为\\的原因。

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

关于javascript - 删除多余的空行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49966580/

10-11 18:07