2013-11-26 91 views
3

我有一个字符串里面有一些西里尔字。每个都以大写字母开头。乌克兰字母RegEx。如何用大写字母分隔西里尔词汇?

var str = 'ХєлпМіПліз'; 

我发现这个解决方案str.match(/[А-Я][а-я]+/g)

但它返回我["Пл"] insted ["Хєлп", "Мі", "Пліз"]。似乎它不承认乌克兰字母('і','є'),只有俄语。

那么,我该如何改变这个正则表达式来包含乌克兰字母?

+0

@ h2ooooooo:No;他只需要改变正则表达式来包含他想要的角色。 – SLaks

回答

2

[А-Я][а-я]确实不包含乌克兰字母。

虽然 'я' 是\u044f 'є' 为\u0454和 'i' 是\u0456\u0404为Є)。您应该手动将它们包含在正则表达式中:

/[А-ЯЄI][а-яєi]+/g

2

解决此问题的方法是查看unicode table以确定所需的字符范围。例如,如果我使用的模式:

str.match(/[А-Я][а-яєі]+/g) 

它适用于您的示例字符串。 (对不起,我不知道乌克兰字母)

7

使用\p{Lu}大写的比赛,\p{Ll}为小写,或\p{L}匹配任何字母

更新: 这仅适用于Java的作品,还没有为JavaScript。 不要忘了在你的正则表达式中加入“apostrof”,“ji”

+0

这是一个好主意,但JavaScript没有这些字符类。 –

+1

oops。抱歉。没有提到它是js。这适用于Java –

+0

,甚至我的解决方案也不包括乌克兰语“apostrof” –