javascript - 查找分解的 unicode 字符以替换为预组合的等价物

标签 javascript regex

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

一个例子。考虑下面这封信。首先是分解版本,然后是预合成版本。

  • ä - 0061 0308 UTF-16
  • ä - UTF-16 格式的 00E4

现在,混合这些看似相同的字符意味着一些问题。当用户搜索“ä” 时,并非所有预期 的出现都将被找到,如this regex演示:

3 matches?!

这里我们得到了三个匹配项。令人困惑!同样,在该文本中搜索 "ä" 只会给出一个匹配项。

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

我怎样才能做到这一点?

最佳答案

您可以在符合 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/

相关文章:

javascript - 在表单提交之前使用 AJAX 更新数据库允许我将新编辑的数据插入到新的 mysql 表中

javascript - 如何使用 node sqlite3 with q (promise)

javascript - 图片的正则表达式匹配网址

javascript - jquery 或 javascript 正则表达式模式

欧元符号 (€) 的正则表达式

python - python 中的 re.search 正则表达式不起作用

c# - 从 VB 到 C# 的正则表达式(LIKE 到正则表达式)

javascript - 将 DIV 居中放置在 DIV 中

javascript - 如何在可内容编辑的 DIV 中查找光标位置?

javascript - Sucuri 404javascript.js 安全问题或内部服务器错误