Учитывая строку, содержащую CamelCase, а также прописные аббревиатуры, например, «ManualABCTask»;
Как ее можно разбить на строку с пробелом между всеми словами и аббревиатурами менее многословно?
У меня был следующий процесс:
let initial = 'ManualABCTask'
//Split on single upper case followed by any number of lower case:
.split(/(['A-Z'][a-z]*)/g)
//the returned array includes empty string entries e.g. ["", "", "Manual", "A", "", "B", "", "C","", "Task", ""] so remove these:
.filter(x => x != '');
//When joining the array, the acronymn uppercase single letters have a space e.g. 'Manual A B C Task' so instead, reduce and add space only if array entry has more than one character
let word = initial.reduce((prevVal,currVal) => {
return (currVal.length == 1) ? prevVal + currVal : prevVal + ' ' + currVal + ' ';
}, '');
Это выполняет работу с нужными комбинациями, например:
- 'ManualABCTask' => 'Manual AB C Task'
- 'ABCManualTask' => 'AB C Ручное задание'
- 'ABCManualDEFTask' => 'AB C Ручное задание DEF'
Но это было много кода для выполненной работы, и, конечно же, его можно было обработать в начальном регулярном выражении.
Я экспериментировал, когда писал вопрос, и с настройкой регулярного выражения получил его в одну строку, большое улучшение! Так что в любом случае отправляю сообщения с решением.
Мой регулярный пользователь знает, как это не здорово, так что это может быть улучшено до сих пор.