Graphemes是文本中用户感知的字符,可能由多个Unicode代码点组成。
重要的是要认识到,用户认为是“字符”的语言书写系统的基本单位可能不仅仅是单个Unicode代码点。相反,该基本单位可以由多个Unicode代码点组成。为避免与计算机使用的术语字符的歧义,这被称为用户感知字符。例如,“G” +重音符号是一个用户感知的字符:用户认为它是一个单一的字符,但实际上由两个Unicode代码点表示。这些用户感知字符由称为字形簇的东西近似,可以通过编程确定。
是否有我可以使用的正则表达式(在javascript中),它将匹配单个字形簇?例如
"한bar".match(/*?*/)[0] === "한"
"நிbaz".match(/*?*/)[0] === "நி"
"aa".match(/*?*/)[0] === "a"
"\r\n".match(/*?*/)[0] === "\r\n"
"♂️foo".match(/*?*/)[0] === "♂️"
\X
来匹配一个字符簇,但不幸的是,这似乎没有被JavaScript风格的正则表达式所支持...如果它们支持使用给定的Unicode属性来匹配代码点,那么您可能可以将Unicode规范中的EGC语法转换为正则表达式。 - Shawn\X
匹配所有字符(无论字节数,例如a
),以及作为一个匹配的字形簇。它的工作方式与 ES6 支持并且可以转换为 ES5 的\PM\pM*
几乎相同(您可以使用 此工具 进行转换)。但是这两者之间存在差异,即\X
对于韩文音节(您在示例中使用了它们)有一些规则,即不会在其上断开。因此,您必须单独匹配它们。有关更多有关 Hangul 的见解,请参见 此处。 - revo