使用JavaScript RegExp匹配尾随空格但不匹配空格行

时间:2017-01-06 14:24:18

标签: javascript regex removing-whitespace

我想匹配行尾的尾随空格,但如果该行完全由空格组成,则不行。

然后应该替换这些空格。

以下表达式使用负前瞻来匹配这些空白行,但似乎不起作用。

/(?!^( | )+$)( | )+$/gm

以下是输入示例

#The following line's trailing spaces should match
Foo     

#But not a line full of whitespace
     

这是一个片段



var oRegExp = /(?!^( | )+$)( | )+$/;

// Test cases
var test = function (sInput, sOutput) {
    var oMatch = sInput.match(oRegExp);
    var bSuccess = (oMatch === null && sOutput === null) || oMatch[0] === sOutput;
    console.log('"' + sInput + '" ', bSuccess ? 'success' : 'failed');
};
test('Foo     ', '     ');
test('     ', null);
test('', null);




Regex101 sample

1 个答案:

答案 0 :(得分:2)

使用正则表达式/\S\s+$/,它匹配任何非空白字符,后跟最后的空白字符。或者更具体的正则表达式/[^ ][ ]+$/,其中不包括换行符,制表符空格等

更多建议:

  1. 实际上,你将这个论点作为一个正则表达式,所以RegExp在这里是完全没必要的。
  2. 全局标志在您的代码中没有任何作用,因为它只出现一次。
  3. 使用RegExp#test方法在字符串匹配时获取布尔值。
  4. var oRegExp = /\S\s+$/;
    // or more specific
    // oRegExp = /[^ ][ ]+$/;
    
    var sValidInput = 'Foo    ';
    var sInvalidInput = '    ';
    
    console.log('"' + sValidInput + '" should match: ', oRegExp.test(sValidInput));
    console.log('"' + sInvalidInput + '" should not match: ', oRegExp.test(sInvalidInput));

    更新:使用使用/^(?!(?: | )+$).*?( | )+$/匹配任何其他组合的正则表达式negative look-ahead assertion

    var oRegExp = /^(?!(?: | )+$).*?( | )+$/;
    
    var sValidInput = 'Foo     ';
    var sInvalidInput = '     ';
    
    
    console.log('"' + sValidInput + '" should match: ', oRegExp.test(sValidInput));
    console.log('"' + sInvalidInput + '" should not match: ', oRegExp.test(sInvalidInput));