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中的正则表达式匹配不能轻易地工作吗?谢谢
通常,解决方案是使用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}
所有西里尔字母.
\n\n\n通常这是通过在点变音符号下将 \'\xc3\xa9\' 与 \'\\u0323\' 组合而成的
\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
与尖锐的变音符号结合起来。
通常的解决方案是在进行比较之前对每个字符串进行标准化(通常为 Unicode 范式 C)。
\n\n\n\n\n我不只是想匹配 e。我想匹配所有组合
\n
不带变音符号的匹配通常是通过标准化为范式 D 并删除所有组合变音字符来完成的。
\n\n不幸的是,规范化在 JS 中不可用,所以如果你想要它,你必须拖入代码来完成它,这必须包含一个大的 Unicode 数据表。其中一项努力是不正常的。为了拾取基于 Unicode 预操作的字符(例如组合变音符号),您还需要一个支持 Unicode 数据库的正则表达式引擎,例如XRegExp Unicode Categories。
\n\n服务器端语言(例如Python、.NET)通常具有对Unicode 规范化的本机支持,因此如果您可以在服务器上进行处理,通常会更容易。
\n 归档时间: |
|
查看次数: |
2829 次 |
最近记录: |