目标 ECMAScript 2019
我们有相当不错的 unicode 支持。我正在创建一个简单的文本查看器,我想在其中通知用户可以将某个分解的字符转换为预组合的字符。我怎样才能找到这些字符?
一个例子。考虑下面这封信。首先是分解版本,然后是预合成版本。
ä
-0061 0308
UTF-16ä
- UTF-16 格式的00E4
现在,混合这些看似相同的字符意味着一些问题。当用户搜索“ä” 时,并非所有预期 的出现都将被找到,如this regex演示:
这里我们得到了三个匹配项。令人困惑!同样,在该文本中搜索 "ä" 只会给出一个匹配项。
问题。为了帮助用户理解发生了什么,我想突出显示任何具有合适的预合成版本的分解字符。因此我需要找到这些字符组的开始和结束。
我怎样才能做到这一点?
最佳答案
您可以在符合 ECMAScript 2018+ 标准的 RegExp 中使用字母 + 变音符号模式:
const re = /\p{Alphabetic}\p{M}+/ug;
const matches = "ständig".matchAll(re); // With decomposed/multibyte char
console.log([...matches].map(x=>[x.index, x.index+x[0].length]))
// => [ [2,4] ]
这里,
\p{Alphabetic}
- 匹配任何字母\p{M}+
- 任何一个或多个变音符号。
关于javascript - 查找分解的 unicode 字符以替换为预组合的等价物,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68822483/