javascript - 查找分解的 unicode 字符以替换为预先组合的等价物
问题描述
针对ECMAScript 2019
我们有相当不错的 unicode 支持的地方。我正在创建一个简单的文本查看器,我想在其中通知用户某个分解的字符可以转换为预先组合的字符。我怎样才能找到这些字符?
一个例子。考虑下面的信。首先我们有分解的版本,然后是预组合的。
ä
-0061 0308
在 UTF-16 中ä
-00E4
在 UTF-16 中
现在,混合这些看似相同的字符意味着一些问题。当用户搜索“ä”时,不会找到所有预期的出现,正如这个正则表达式所示:
在这里,我们得到了三场比赛。令人困惑!同样,在此文本中搜索“ä”只会得到一个匹配项。
这个问题。为了帮助用户了解正在发生的事情,我想突出显示任何具有合适的预组合版本的分解字符。因此我需要找到这些字符组的开始和结束。
我怎样才能做到这一点?
解决方案
您可以在符合 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}+
- 任何一个或多个变音符号。
推荐阅读
- tensorflow - 如何检查检查点的值?
- sqlite - 部署 Java FX 数据库应用程序
- c# - 遍历对象列表时面临问题
- elixir - “with”运算符中的逻辑条件不起作用
- python - ARIMA 模型预测的订购时间戳
- apache-spark - spark中的广播变量是否移动到YARN中的每个执行程序或每个节点管理器?
- apache-spark - 如何在已应用于 Spark RDD 的函数中打印语句?
- python - python-pptx的xy散点图不起作用
- spring-boot - GitLab 共享运行器,将 Spring Boot 微服务应用部署到自定义服务器
- node.js - 插槽填充在对话流中触发不同的意图