
上QQ阅读APP看书,第一时间看更新
2.4.1 拆分文本
下面以一个简单的文本拆分函数为例,它接收一个字符串,然后把该字符串拆分为指定长度的多个字符串,以便能够适应某个文本编辑器控件的宽度,如程序清单2.11所示。
程序清单2.11 简单的文本拆分函数

一开始看上去,这个实现似乎是正确的。对于输入文本"Testing, testing"和行长度5,结果行是["Testi", "ng, t", "estin", "g"]。这是我们期望的结果,因为文本每隔5个字符分成了一行。
但是,其他符号有更复杂的编码。例如,女警官表情符号。尽管它看起来是一个字符,但JavaScript使用5个字符来表示它。
返回5。如果我们尝试拆分包含这个表情符号的字符串,那么取决于它出现在文本中的位置,拆分结果可能让我们感到意外。如果我们尝试拆分文本“
”,行长度为5,则得到的数组为
。
女警官表情符号由两个单独的表情符号组成:警官表情符号和女性标志表情符号。这两个表情符号通过零宽连接字符串"\ud002"组合而成。这个字符串没有图形表示,它只是用于组合其他字符。
警官表情符号“”由两个相邻字符表示,如果我们尝试将较长的字符串
按行长度为5进行拆分,可以观察到这一点。这将拆分警官表情符号,得到
。\uXXXX是Unicode转义字符,用来表示无法原样打印的字符。虽然女警官表情符号被显示为一个符号,但它是用5个不同的转义字符序列来表示的:\ud83d、\udc6e、\u200d、\u2640和\ufe0e。
轻率地在字符边界拆分文本可能得到无法显示的结果,甚至改变文本的意义。