【发布时间】:2013-06-28 05:20:46
【问题描述】:
我想匹配非洲约鲁巴语“ẹ́”中的这个字符。通常这是通过在点变音符号下将 'é' 与 '\u0323' 组合而成。我发现:
'é\u0323'.match(/[é]\u0323/) works but
'ẹ́'.match(/[é]\u0323/) does not work.
我不只是想匹配 e。我想匹配所有组合。现在,我的解决方案涉及枚举所有组合。像这样:/[ÁÀĀÉÈĒẸE̩Ẹ́É̩Ẹ̀È̩Ẹ̄Ē̩ÍÌĪÓÒŌỌO̩Ọ́Ó̩Ọ̀Ò̩Ọ̄Ō̩ÚÙŪṢS̩áàāéèēẹe̩ẹ́é̩ẹ̀è̩ẹ̄ē̩íìīóòōọo̩ọ́ó̩ọ̀ò̩ọ̄ō̩úùūṣs̩]/
难道没有更短、更好的方法来做到这一点,或者 javascript 中的 unicode 变音符号组合字符的正则表达式匹配不那么容易吗? 谢谢
【问题讨论】:
-
如果我不得不说实话,我宁愿阅读和维护那个短字符串,也不愿解密和理解可能更聪明的正则表达式的 \uxxxx 部分。使用查找表总是比先计算 char 快。如果正则表达式失败,一种可能的方法是在跨度中呈现字符,然后比较
-
这很好。也许现在的方式更好。
-
我最终选择了 \uxxxx 部分,因为在 vim 中编辑它更有意义,因为当没有不同宽度的 unicode 点随处可见不同的流动方向时,光标位置会做一些非常棒的事情:它的位置基本上变成了一个随机变量。
标签: javascript regex unicode diacritics