For AI agents: the complete documentation index is available at /tc39-atlas/llms.txt, the full documentation bundle is available at /tc39-atlas/llms-full.txt, and this page is available as Markdown at /tc39-atlas/proposals/year/pending/proposal-string-trim-characters.md.
  • 简体中文
  • String trim characters S0

    中文标题:字符串修剪指定字符

    提案概览
    提案速览

    该提案为 String.prototype.trimtrimStarttrimEnd 添加可选参数 characters,允许开发者从字符串的开头和/或结尾移除指定字符。目前只能移除空白字符和行终止符,因此移除其他字符需要借助正则表达式或手动循环,可读性较差且可能存在性能问题。新 API 旨在提供一种语义化且便捷的方式来表达这类操作。

    Note

    以下 README 来自上游仓库,其中的阶段或状态标注可能滞后;当前信息以提案概览为准。

    proposal-string-trim-characters

    .trim().trimStart().trimEnd() 添加参数的提案,以允许从字符串中去除指定字符。

    状态

    该提案是一个 阶段 0 提案,正在等待反馈。

    动机

    我们经常通过 trimtrimStarttrimEnd 从字符串的开头或结尾(或两者)移除一些前导/尾随空白字符。

    我们只能移除 WhiteSpaceLineTerminator。如果你想移除一些不由空白定义的字符串,目前没有语义化和便捷的方式。

    语义与便捷

    本提案的重点是语义化便捷性

    目前,我们如何移除一些特定的前导/尾随字符?

    • 正则表达式
    const str = "-_-abc-_-_";
    const characters = "-_";
    
    const regex = new RegExp(`(^[${characters}]*)|([${characters}]*$)`, 'g')
    
    console.log(str.replaceAll(regex, '')) // abc
    • 手动
    const str = "-_-abc-_-_";
    const characters = "-_";
    
    let start = 0;
    while (characters.indexOf(str[start]) >= 0) {
        start += 1;
    }
    let end = str.length - 1;
    while (characters.indexOf(str[end]) >= 0) {
        end -= 1;
    }
    
    console.log(str.substr(start, end - start + 1)) // abc

    如你所见,这两种解决方案都无法让人一眼看出它在做什么,你必须仔细思考才能理解它。

    性能

    对于正则版本,也可能存在性能问题,如同 TypeScript 的实现 所示:jsbench

    安慰

    这就是为什么我们需要这个提案。它将添加一些语义化便捷的方式,以清晰地表示我想要的操作。而且作为一个可能的额外好处,它还能减少我们编写的大量性能较差的代码。

    核心 API

    String.prototype.trimString.prototype.trimStartString.prototype.trimEnd 添加一个可选参数 characters

    该参数将允许我们指定哪些字符将从字符串的开头或结尾(或两者)被移除。

    API 的定义将如下所示:

    interface String {
        trim(characters?: string): string;
        trimStart(characters?: string): string;
        trimEnd(characters?: string): string;
    }
    

    有了这个提案,我们可以这样使用:

    const str = "-_-abc-_-_";
    const characters = "-_";
    
    console.log(str.trim(characters)) // abc
    console.log(str.trimStart(characters)) // abc-_-
    console.log(str.trimEnd(characters)) // -_-abc

    已有实现

    之前的讨论

    提案者

    拥护者(Champions):

    • @Kingwl (Wenlu Wang, KWL)