如何在 JS 中将字符串切割成字符?

2020-10-26 10:20:50 浏览数 (1)

第一种方案:使用空字符串当做分隔符.

'Dragon ? '.split('')

(10) ["D", "r", "a", "g", "o", "n", " ", "�", "�", " "]

结果:失败,Emoji 无法正常切割

第二种方案:使用正则表达式切割

'Dragon ? '.split(/|/)

(10) ["D", "r", "a", "g", "o", "n", " ", "�", "�", " "]

结果:失败,Emoji 无法正常切割

第三种方案:使用 unicode 模式的正则表达式切割

'Dragon ? '.split(/|/u)

(9) ["D", "r", "a", "g", "o", "n", " ", "?", " "]

结果:成功,可以切割 Emoji

第四种方案:使用 ES 的语法

[...'Dragon ? ']

(9) ["D", "r", "a", "g", "o", "n", " ", "?", " "]

结果:成功,可以切割 Emoji


下面,我们测试一种更加复杂的场景:国旗。

" ?? ??".split(/|/u)

(7) [" ", "?", "?", " ", "?", "?", ""]

[..." ?? ??"]

(7) [" ", "?", "?", " ", "?", "?", ""]

很明显,两种切割方式的结果可能会不符合读者的直觉。

但是,这种分割结果是符合要求的。

实际上,根据 Unicode 的标准,国旗是通过多个字符组合而成。

比如,中国 ?? 是由"?" 和 "?" 组合而成。

["?", "?", "?"].join('')

"???"

["?", "?", "?"].join('')

"???"

3个字符调整顺序后再拼接,会展现出两种不同的国旗。对于程序员,如果遇到字符串切割、多行文本渲染、字符串逆序等需求时,一定要根据实际情况采用合适方案处理。

0 人点赞