Javascript Regex + Unicode Diacritic组合字符`

use*_*580 5 javascript regex unicode diacritics

我希望在非洲约鲁巴语"ẹ"中匹配这个角色.通常这是通过在点变音符号下组合'é'和'\ u0323'来实现的.我找到:

'é\u0323'.match(/[é]\u0323/) works but
'??'.match(/[é]\u0323/) does not work.
Run Code Online (Sandbox Code Playgroud)

我不只是想匹配e.我想匹配所有组合.现在,我的解决方案涉及枚举所有组合.像这样:/[ÁÀ?ÉÈ??E???É???È?????ÍÌ?ÓÒ??O???Ó???Ò?????ÚÙ??S?áà?éè??e???é???è?????íì?óò??o???ó???ò?????úù??s?]/

可能没有更短的,因此更好的方法来做到这一点,或者在unicode diacritic组合字符的javascript中的正则表达式匹配不能轻易地工作吗?谢谢

ste*_*ema 5

通常,解决方案是使用Unicode属性和/或脚本,但JavaScript本身不支持它们.

但是存在lib XRegExp ,它增加了这种支持.有了这个lib,你可以使用

\p{L}:匹配任何语言的任何类型的信件.

\p{M}:一个旨在与另一个角色组合的角色(例如重音符号,变音符号,封闭框等).

所以你的角色类看起来像这样:

[\p{L}\p{M}]+
Run Code Online (Sandbox Code Playgroud)

这将匹配Unicode表中的所有可能的字母.

如果要限制它,可以查看Unicode脚本并用脚本替换\p{L},它们会收集某些语言的所有字母.例如\p{Latin},所有拉丁字母或\p{Cyrillic}所有西里尔字母.


bob*_*nce 4

\n

通常这是通过在点变音符号下将 \'\xc3\xa9\' 与 \'\\u0323\' 组合而成的

\n
\n\n

然而,这不是你在这里所拥有的:

\n\n
\'\xe1\xba\xb9\xcc\x81\'\n
Run Code Online (Sandbox Code Playgroud)\n\n

这不是 U+0065,U+0323 而是 U+1EB9,U+0301 - 将 an\xe1\xba\xb9与尖锐的变音符号结合起来。

\n\n

通常的解决方案是在进行比较之前对每个字符串进行标准化(通常为 Unicode 范式 C)。

\n\n
\n

我不只是想匹配 e。我想匹配所有组合

\n
\n\n

不带变音符号的匹配通常是通过标准化为范式 D 并删除所有组合变音字符来完成的。

\n\n

不幸的是,规范化在 JS 中不可用,所以如果你想要它,你必须拖入代码来完成它,这必须包含一个大的 Unicode 数据表。其中一项努力是不正常的。为了拾取基于 Unicode 预操作的字符(例如组合变音符号),您还需要一个支持 Unicode 数据库的正则表达式引擎,例如XRegExp Unicode Categories

\n\n

服务器端语言(例如Python、.NET)通常具有对Unicode 规范化的本机支持,因此如果您可以在服务器上进行处理,通常会更容易。

\n