首页 > 解决方案 > 查找分解的 unicode 字符以替换为预先组合的等价物

问题描述

针对ECMAScript 2019我们有相当不错的 unicode 支持的地方。我正在创建一个简单的文本查看器,我想在其中通知用户某个分解的字符可以转换为预先组合的字符。我怎样才能找到这些字符?

一个例子。考虑下面的信。首先我们有分解的版本,然后是预组合的。

现在,混合这些看似相同的字符意味着一些问题。当用户搜索“ä”时,不会找到所有预期的出现,正如这个正则表达式所示:

3场比赛?!

在这里,我们得到了场比赛。令人困惑!同样,在此文本中搜索“ä”只会得到一个匹配项。

这个问题。为了帮助用户了解正在发生的事情,我想突出显示任何具有合适的预组合版本的分解字符。因此我需要找到这些字符组的开始结束

我怎样才能做到这一点?

标签: javascriptregex

解决方案


您可以在符合 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}+- 任何一个或多个变音符号。

推荐阅读