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

Rec*_*cct 10 javascript regex

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

^^quick^^^\n
^brown^^^\n
^^fox^^^^^\n
Run Code Online (Sandbox Code Playgroud)

使用.replace()删除尾随空格的正则表达式是什么?使用replace(/\s+$/g, "")不是很有用,因为它只用"fox"删除最后一行的空格.

通过其他问题,我发现replace(/\s+(?:$|\n)/g,"")匹配正确的部分,但也摆脱了新的行字符,但我确实需要它们.

所以完美的结果将是:

^^quick\n
^brown\n
^^fox\n
Run Code Online (Sandbox Code Playgroud)

(只删除其他所有内容的尾随空格)

rid*_*ner 15

添加'm'多行修改器.

replace(/\s+$/gm, "")
Run Code Online (Sandbox Code Playgroud)

还是更快......

replace(/\s\s*$/gm, "")
Run Code Online (Sandbox Code Playgroud)

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

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

replace(/[^\S\r\n]+$/gm, "")
Run Code Online (Sandbox Code Playgroud)

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

  • @leonard vertighel - 这个应该做的伎俩:`replace(/ ^ [^\S\r \n] + | [^\S\r \n] + $/gm,"")` (3认同)
  • 似乎有将多个换行符减少为一个的副作用? (2认同)
  • @dalgard - 你是对的。答案现在更新为没有这种不利影响的替代模式。感谢您指出了这一点! (2认同)
  • 如果我想在 `replace(/[^\S\r\n]+$/gm, "")` 中包含前导空格怎么办? (2认同)