我没有看到其他答案提到国际分段器
,它“支持区域设置敏感的文本分割”,这意味着在处理由多个代码点组成的字符时,可以可靠地识别第一个字符。在浏览器中依赖它的最大警告是缺乏Firefox支持,请参阅https://caniuse.com/mdn-javascript_builtins_intl_segmenter_segment网站&https://bugzilla.mozilla.org/show_bug.cgi?id=1423593.
这里已经有很多很好的答案,所以我将只关注按字符拆分。
以下是一些方法的比较:https://stackblitz.com/edit/stackblitez-typescript-lrag9u?devToolsHeight=90&file=index.ts
使用以下测试字符串:
常量str='🐅-👨👩👧-நி-깍-葛󠄀';
天真、分裂
str.split(“”);//(20)[“\ud83d”,“\udc05','-','\ud83d',''\udc68','','\ud83d'ந', 'ி', '-', '깍', '-', '葛', '\udb40','\udd00']
稍微好一点,传播运营商
[…字符串]// (15) ["🐅", '-', '👨', '', '👩', '', '👧', '-', 'ந', 'ி', '-', '깍', '-', '葛', '󠄀']
在支持的浏览器中,Intl.Segmenter
[…new Intl.Segmenter().segment(str)].map((g)=>g.segment);// (9) ["🐅", '-', '👨👩👧', '-', 'நி', '-', '깍', '-', '葛󠄀']
从“Graphemer”导入Graphemer;const splitter=新图示器();splitter.split图表(str);// (9) ["🐅", '-', '👨👩👧', '-', 'நி', '-', '깍', '-', '葛󠄀']
洛达什4.17.10
从“lodash”导入;_.split(str,“”);// (11) ["🐅", '-', '👨👩👧', '-', 'ந', 'ி', '-', '깍', '-', '葛', '󠄀']
从'导入{graphemeSplit}/fabric_graphme拆分';graphemeSplit(str);// (15) ["🐅", '-', '👨', '', '👩', '', '👧', '-', 'ந', 'ி', '-', '깍', '-', '葛', '󠄀']
等待导入(“@formatjs/intl-segmenter/polyfill-force”);[…new Intl.Segmenter().segment(str)].map((g)=>g.segment);// (9) ["🐅", '-', '👨👩👧', '-', 'நி', '-', '깍', '-', '葛󠄀']