我有一个字符串里面有一些西里尔字。每个都以大写字母开头。乌克兰字母RegEx。如何用大写字母分隔西里尔词汇?
var str = 'ХєлпМіПліз';
我发现这个解决方案str.match(/[А-Я][а-я]+/g)
。
但它返回我["Пл"]
insted ["Хєлп", "Мі", "Пліз"]
。似乎它不承认乌克兰字母('і','є'),只有俄语。
那么,我该如何改变这个正则表达式来包含乌克兰字母?
我有一个字符串里面有一些西里尔字。每个都以大写字母开头。乌克兰字母RegEx。如何用大写字母分隔西里尔词汇?
var str = 'ХєлпМіПліз';
我发现这个解决方案str.match(/[А-Я][а-я]+/g)
。
但它返回我["Пл"]
insted ["Хєлп", "Мі", "Пліз"]
。似乎它不承认乌克兰字母('і','є'),只有俄语。
那么,我该如何改变这个正则表达式来包含乌克兰字母?
[А-Я][а-я]
确实不包含乌克兰字母。
虽然 'я' 是\u044f
'є' 为\u0454
和 'i' 是\u0456
(\u0404
为Є)。您应该手动将它们包含在正则表达式中:
/[А-ЯЄI][а-яєi]+/g
解决此问题的方法是查看unicode table以确定所需的字符范围。例如,如果我使用的模式:
str.match(/[А-Я][а-яєі]+/g)
它适用于您的示例字符串。 (对不起,我不知道乌克兰字母)
使用\p{Lu}
大写的比赛,\p{Ll}
为小写,或\p{L}
匹配任何字母
更新: 这仅适用于Java的作品,还没有为JavaScript。 不要忘了在你的正则表达式中加入“apostrof”,“ji”
这是一个好主意,但JavaScript没有这些字符类。 –
oops。抱歉。没有提到它是js。这适用于Java –
,甚至我的解决方案也不包括乌克兰语“apostrof” –
@ h2ooooooo:No;他只需要改变正则表达式来包含他想要的角色。 – SLaks