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