2015-12-22 2 views
0

Я ищу регулярное выражение для вывода разных слов в верхнем и нижнем регистре.Regex для вывода разных слов в верхнем и нижнем регистре

Пример строки: Кубок Германии по футболу

Текущее решение у меня есть:

str.replace(/([a-z])([A-Z])/g, "$1 $2"); 

Это решает проблему, когда есть Обл как «HiAgain», но не когда это «HIAgain».

Как я могу заставить его работать в том условии, что если заглавное слово имеет длину не менее> 2 символов, оно идентифицирует его как слово, которое выводится как var - либо $ 1, либо $ 2.

+0

Я думаю, вы ищете '{n}' или '{n, m}' или '+' quantifier. Каков ожидаемый результат для этих двух входов – Tushar

+0

И каков ожидаемый результат для 'HIAgain'? –

ответ

2

Вы могли бы заменить

/([A-Z]+)(?=[A-Z][a-z])/g 

С: $1 для того, чтобы отделить "HIAgain" в "HI Again".

'DFBPokal'.replace(/([A-Z]+)(?=[A-Z][a-z])/g, "$1 "); 
// "DFB Pokal" 

Example Here

Это по существу не выбирает заглавные буквы до буквы верхнего регистра, за которым следует строчной буквы.


Если вы хотите, чтобы поймать обоих случаях, можно заменить:

/([A-Z]+)(?=[A-Z][a-z])|([a-z])(?=[A-Z])/g 

С $1$2 - Example Here

Результаты:

+0

Благодарим вас за быстрое решение! Я не ответил раньше, потому что полностью забыл предоставить обратную связь после того, как вы проверили свое решение. – Denialos

0

простым решением было бы использовать /([a-z]|[A-Z]+)([A-Z])/g вместо вашего регулярного выражения:

'HIAgain'.replace(/([a-z]|[A-Z]+)([A-Z])/g, "$1 $2"); -> 'HI Again' 
'ABBRWord'.replace(/([a-z]|[A-Z]+)([A-Z])/g, "$1 $2"); -> 'ABBR Word' 

Идея состоит в том, чтобы рассматривать все, кроме последней заглавной буквы, как законное предшествующее слово.

Смежные вопросы