👋

😊👨‍👩‍👦❤️TypeScript(JavaScript)でマルチバイト文字列を指定文字数で切り出す

2022/11/05に公開・約900字

いわゆるtruncate。Node16以降であればIntl.Segmenterというわかち書きAPIが使えるらしいのでそれを利用。

export const truncate = (str: string, size: number, suffix = '...') => {
  const segmenter = new Intl.Segmenter('ja', { granularity: 'grapheme' })
  const segItr = segmenter.segment(str)
  const segArr = Array.from(segItr, ({ segment }) => segment)
  return `${segArr.slice(0, size).join('')}${
    segArr.length > size ? suffix : ''
  }`
}

truncateのためにわかち書きってコスト高そうだし牛刀割鶏じゃない?と思わなくもないが、様々なエッジケースをカバー出来るとの事で(機序を深追いしていないが)実際に他の方法では文字が破壊されていたケースで壊れなくなった。

References

Discussion

ログインするとコメントできます