RegEx为乌克兰字母。如何用大写字母分隔西里尔字?

时间:2013-11-26 18:22:01

标签: javascript regex string

我有一个字符串里面有一些西里尔字。每个都以大写字母开头。

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

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

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

那么,我如何更改该正则表达式以包含乌克兰字母?

7 个答案:

答案 0 :(得分:8)

使用\p{Lu}表示大写字母,\p{Ll}表示小写,或\p{L}表示匹配任何字母

更新的 这仅适用于Java,不适用于JavaScript。 不要忘记在你的正则表达式中包含“apostrof”,“ji”

答案 1 :(得分:4)

[А-Я]不是西里尔字母,只是俄语!

西里尔文是一种写作系统。它在多种语言的字母中使用。 (例如拉丁语:西欧语言的字符集,东欧等)

同时拥有俄语和乌克兰语,您会得到[А-ЯҐЄІЇ]

要添加白俄罗斯语:[А-ЯҐЄІЇЎ]

对于所有西里尔字符(包括巴尔干语和旧西里尔字母),您可以通过Unicode子集类来获取它,例如:\p{IsCyrillic}


要分别与乌克兰人打交道:

[А-ЩЬЮЯҐЄІЇ][А-ЩЬЮЯҐЄІЇа-щьюяґєії]在每种情况下似乎都是由33个字母组成的完整乌克兰字母。

撇号不是字母,而是偶尔包含在字母表中,因为它会影响下一个元音。 撇号是单词的一部分,而不是分隔符。它可能以几种方式显示:

27 "'" APOSTROPHE
60 "`" GRAVE ACCENT
2019 "’" RIGHT SINGLE QUOTATION MARK
2bc "ʼ" MODIFIER LETTER APOSTROPHE

也许还有更多

是的,单引号有点复杂。没有通用的标准。

答案 2 :(得分:3)

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

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

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

答案 3 :(得分:3)

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

“я”为\u044f,“є”为\u0454,“i”为\u0456\u0404为Є)。你应该手工将它们包含在正则表达式中:

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

答案 4 :(得分:1)

乌克兰字母表中有四个不同于西里尔字母的单词,例如:[і,є,ї,ґ],也可以包含单个引号

"ґуля, з'їсти, істота, Європа".match(/[а-яієїґ\']+/ig)

i由the和大写字母匹配,就像“Європа”

一样

答案 5 :(得分:0)

使用乌克兰字母“ i”和其他字母

python
r's/[^а-яА-Я.!?]/./g+' 

答案 6 :(得分:0)

只有乌克兰语,没有俄语

[бвгґджзклмнпрстфхцчшщйаеєиіїоуюяь]/gi