String trim characters S0
中文标题:字符串修剪指定字符
- 阶段: Stage 0
- 状态: 进行中
- ECMAScript 版本: —
- 同步时间: 2026年8月26日
- English original · 官方仓库
该提案为 String.prototype.trim、trimStart 和 trimEnd 添加可选参数 characters,允许开发者从字符串的开头和/或结尾移除指定字符。目前只能移除空白字符和行终止符,因此移除其他字符需要借助正则表达式或手动循环,可读性较差且可能存在性能问题。新 API 旨在提供一种语义化且便捷的方式来表达这类操作。
以下 README 来自上游仓库,其中的阶段或状态标注可能滞后;当前信息以提案概览为准。
proposal-string-trim-characters
为 .trim()、.trimStart() 和 .trimEnd() 添加参数的提案,以允许从字符串中去除指定字符。
状态
该提案是一个 阶段 0 提案,正在等待反馈。
动机
我们经常通过 trim、trimStart 和 trimEnd 从字符串的开头或结尾(或两者)移除一些前导/尾随空白字符。
我们只能移除 WhiteSpace 和 LineTerminator。如果你想移除一些不由空白定义的字符串,目前没有语义化和便捷的方式。
语义与便捷
本提案的重点是语义化和便捷性。
目前,我们如何移除一些特定的前导/尾随字符?
- 正则表达式
- 手动
如你所见,这两种解决方案都无法让人一眼看出它在做什么,你必须仔细思考才能理解它。
性能
对于正则版本,也可能存在性能问题,如同 TypeScript 的实现 所示:jsbench。
安慰
这就是为什么我们需要这个提案。它将添加一些语义化和便捷的方式,以清晰地表示我想要的操作。而且作为一个可能的额外好处,它还能减少我们编写的大量性能较差的代码。
核心 API
向 String.prototype.trim、String.prototype.trimStart 和 String.prototype.trimEnd 添加一个可选参数 characters。
该参数将允许我们指定哪些字符将从字符串的开头或结尾(或两者)被移除。
API 的定义将如下所示:
有了这个提案,我们可以这样使用:
已有实现
- Lodash - lodash.trim, lodash.trimStart, lodash.trimEnd
- PHP - function.trim, function.ltrim, function.rtrim
- Python - str.strip, str.lstrip, str.rstrip
- C# - String.Trim, String.TrimStart, String.TrimEnd
- Go - Trim, TrimLeft, TrimRight, TrimPrefix, TrimSuffix
之前的讨论
- https://github.com/tc39/proposal-string-left-right-trim/issues/22
- https://esdiscuss.org/topic/string-trim-chars
- https://esdiscuss.org/topic/string-prototype-trimstart-string-prototype-trimend-with-a-given-string
提案者
拥护者(Champions):
- @Kingwl (Wenlu Wang, KWL)