作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我有这个 Unicode 字符串:Ааа́ббб́Ввв́ГгзазДд
我想按字符拆分它。现在,如果我尝试循环显示所有字符的真值,我会得到如下结果:
A a a ' Б ...
有没有办法将此字符串正确拆分为字符:А а ́
?
最佳答案
要正确执行此操作,您需要的是计算字素簇边界的算法,如 UAX 29 中所定义。 .不幸的是,这需要从 Unicode 字符数据库中了解哪些字符是哪些类的成员,而 JavaScript 不提供该信息 (*)。因此,您必须在脚本中包含 UCD 的副本,这会使它变得非常庞大。
如果您只需要担心拉丁语或西里尔语使用的基本重音符号,另一种方法是只采用组合变音符号 block (U+0300-U+036F)。这对于其他语言和符号会失败,但对于您想要执行的操作可能就足够了。
function findGraphemesNotVeryWell(s) {
var re= /.[\u0300-\u036F]*/g;
var match, matches= [];
while (match= re.exec(s))
matches.push(match[0]);
return matches;
}
findGraphemesNotVeryWell('Ааа́Ббб́Ввв́Г㥴Дд');
["А", "а", "а́", "Б", "б", "б́", "В", "в", "в́", "Г", "г", "Ґ", "ґ", "Д", "д"]
(*:可能有一种方法可以通过让浏览器呈现字符串并测量其中选择的位置来提取信息...但这肯定会非常困惑和困难跨浏览器工作。)
关于javascript - 带有由字符分隔的变音符号的 Unicode 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10758913/
COW 不是奶牛,是 Copy-On-Write 的缩写,这是一种是复制但也不完全是复制的技术。 一般来说复制就是创建出完全相同的两份,两份是独立的: 但是,有的时候复制这件事没多大必要
我是一名优秀的程序员,十分优秀!