在 JavaScript 中修剪单个多行字符串中换行符之前的尾随空格

问题描述 投票:0回答:2

假设我有这个单个字符串,这里我用^表示空格(“”)

^^quick^^^\n
^brown^^^\n
^^fox^^^^^\n

使用什么正则表达式通过 .replace() 删除尾随空格? 使用

replace(/\s+$/g, "")
并没有多大帮助,因为它只会删除空格 最后一行带有“fox”。

浏览其他问题我发现

replace(/\s+(?:$|\n)/g,"")
匹配正确的部分 但也摆脱了新行字符,但我确实需要它们。

所以完美的结果将是:

^^quick\n
^brown\n
^^fox\n

(仅删除尾随空格,其他所有内容均保留)

javascript regex
2个回答
22
投票

添加

'm'
多行修改器。

replace(/\s+$/gm, "")

或者更快...

replace(/\s\s*$/gm, "")

为什么这样更快?请参阅:更快的 JavaScript 修剪

附录: 上面的表达式具有压缩相邻换行符的潜在不良效果。如果这不是所需的行为,则首选以下模式:

replace(/[^\S\r\n]+$/gm, "")

于 2013 年 11 月 17 日编辑: - 添加了不压缩连续换行符的替代模式。 (感谢 dalgard 指出了这个缺陷。)


0
投票

使用

String.prototype.trimEnd()

multilineText.split('\n').map((line) => line.trim()).join('\n');

正则表达式难以阅读和理解,尽可能支持简单的函数组合。

const multilineText = '  quick   \n brown   \n  fox     \n';

const multilineTextTrimmed = multilineText
  .split('\n')
  .map((line) => line.trimEnd())
  .join('\n');

console.log(multilineTextTrimmed);

console.assert(multilineTextTrimmed === '  quick\n brown\n  fox\n');

© www.soinside.com 2019 - 2024. All rights reserved.