我有一个像这样的文件:

const stringToTest = ' test1\n test2\n test3\n \n \n'


我想得到的输出是:

stringTransformed = 'test1\n test2\n test3\n \n'


所以换句话说,我想摆脱最后的空白和换行:

' \n'


我尝试了以下方法:

stringToTest.replace(/\s+\n$/, '')


但会删除文件末尾的所有空白和换行符。

我知道我可以使用split and join来做到这一点,但我更喜欢使用正则表达式来完成它,因为它速度更快,有时我的字符串很大,因此我不想将它们拆分为数组。

最佳答案

您的\s模式匹配任何空格。如果从中减去CR和LF符号,则只会匹配水平空白。

因此,您可以使用

replace(/[^\S\n\r]*\n$/, '')


或者,也可以处理CRLF结尾:

replace(/[^\S\n\r]*\r?\n$/, '')


请注意,如果在最后一个换行符之前的行中没有水平空格字符,我将+更改为*量也可以删除最后一个换行符。

JS演示:



const stringToTest = ' test1\n test2\n test3\n \n \n';
console.log(stringToTest.replace(/[^\S\n\r]*\n$/, ''));

09-17 10:13