假设我有这个单个字符串,这里我用^表示空格(“”)
^^quick^^^\n
^brown^^^\n
^^fox^^^^^\n
使用什么正则表达式通过 .replace() 删除尾随空格? 使用
replace(/\s+$/g, "")
并没有多大帮助,因为它只会删除空格
最后一行带有“fox”。
浏览其他问题我发现
replace(/\s+(?:$|\n)/g,"")
匹配正确的部分
但也摆脱了新行字符,但我确实需要它们。
所以完美的结果将是:
^^quick\n
^brown\n
^^fox\n
(仅删除尾随空格,其他所有内容均保留)
添加
'm'
多行修改器。
replace(/\s+$/gm, "")
或者更快...
replace(/\s\s*$/gm, "")
为什么这样更快?请参阅:更快的 JavaScript 修剪
附录: 上面的表达式具有压缩相邻换行符的潜在不良效果。如果这不是所需的行为,则首选以下模式:
replace(/[^\S\r\n]+$/gm, "")
于 2013 年 11 月 17 日编辑: - 添加了不压缩连续换行符的替代模式。 (感谢 dalgard 指出了这个缺陷。)
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');