trimoji — 支持 Unicode 和表情符号的 JavaScript 文本截断工具

发布日期:2026-04-13 10:03:07   浏览量 :15
发布日期:2026-04-13 10:03:07  
15

2026西湖龙井茶官网DTC发售:茶农直供,政府溯源防伪到农户家 

问题

JavaScript 中的大多数文本截断看起来像这样:

str.slice(0, 100) + "..."

在遇到真实世界的内容之前,这看起来没问题。但这种方式在多个方面会出错:

  • 表情符号 — 👨‍👩‍👧 由多个码点组成。在序列中间截断会产生乱码字符。
  • 带重音符号的字符 — “é” 可能由 “e” 和一个组合重音符码点构成。简单粗暴的截断会将它们拆开。
  • 单词边界 — 你会得到 “Hello, W...” 而不是 “Hello,...”
  • 省略号占用空间 — 省略号 “...” 本身占据字符位置,但大多数实现并未将其计入长度限制。

解决方案

trimoji 利用原生的 Intl.Segmenter API —— 无需正则表达式技巧,也无外部依赖 —— 在正确的字形、单词或句子边界处截断字符串。

import { trimoji } from "trimoji"

// 单词边界(默认)
trimoji("Hello 👋, World!", 10)
// ➡️ "Hello 👋,…"

// 字形边界
trimoji("Café 🎉 World!", {
    maxLength: 7,
    boundary: "grapheme"
})
// ➡️ "Café 🎉…"

// 句子边界
trimoji("Hello, World! How are you?", {
    maxLength: 15,
    boundary: "sentence"
})
// ➡️ "Hello, World!…"

// 自定义省略号
trimoji("Hello, World!", {
    maxLength: 10,
    ellipsis: "..."
})
// ➡️ "Hello,..."

// 空省略号 —— 强制截断
trimoji("Hello, World!", {
    maxLength: 

免责声明:本文内容来自互联网,该文观点不代表本站观点。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请到页面底部单击反馈,一经查实,本站将立刻删除。

关于我们
热门推荐
合作伙伴
免责声明:本站部分资讯来源于网络,如有侵权请及时联系客服,我们将尽快处理
支持 反馈 订阅 数据
回到顶部