5

我想在非洲约鲁巴语“ẹ́”中匹配这个字符。通常这是通过在点变音符号下将 'é' 与 '\u0323' 组合而成。我找到:

'é\u0323'.match(/[é]\u0323/) works but
'ẹ́'.match(/[é]\u0323/) does not work.

我不只是想匹配 e。我想匹配所有组合。现在,我的解决方案涉及枚举所有组合。像这样:/[ÁÀĀÉÈĒẸE̩Ẹ́É̩Ẹ̀È̩Ẹ̄Ē̩ÍÌĪÓÒŌỌO̩Ọ́Ó̩Ọ̀Ò̩Ọ̄Ō̩ÚÙŪṢS̩áàāéèēẹe̩ẹ́é̩ẹ̀è̩ẹ̄ē̩íìīóòōọo̩ọ́ó̩ọ̀ò̩ọ̄ō̩úùūṣs̩]/

难道没有一种更短、更好的方法来做到这一点,或者在 javascript 中的 unicode 变音符号组合字符的正则表达式匹配不那么容易吗?谢谢

4

2 回答 2

5

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

但是存在 添加此支持的 lib XRegExp 。有了这个库,您可以使用

\p{L}:匹配来自任何语言的任何类型的字母。

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

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

[\p{L}\p{M}]+

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

如果你想限制它,你可以看看Unicode脚本并用\p{L}一个脚本替换,它们收集来自某些语言的所有字母。例如\p{Latin},所有拉丁字母或\p{Cyrillic}所有西里尔字母。

于 2013-06-28T06:04:53.010 回答
3
于 2013-06-28T08:46:59.583 回答