【发布时间】:2020-02-28 00:34:17
【问题描述】:
给定一个包含 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' => '手动 ABC 任务'
- 'ABCManualTask' => 'ABC 手动任务'
- 'ABCManualDEFTask' => 'ABC 手动 DEF 任务'
但是完成这项工作的代码很多,而且肯定可以在初始正则表达式中处理。
我在写问题的同时进行了实验,并对正则表达式进行了调整,将其简化为一行,有了很大的改进!所以无论如何都要发布解决方案。
我的正则表达式不太好,所以这可能还可以改进。
【问题讨论】:
标签: javascript regex