Javascript 将字符串拆分为CamelCase单词和大写首字母缩写词
给定一个包含CamelCase和大写首字母缩写词的字符串,例如“ManualABCTask” 如何将其拆分为一个字符串,并在所有单词和首字母缩略词之间留有一个空格,以一种不太冗长的方式 我有以下过程:Javascript 将字符串拆分为CamelCase单词和大写首字母缩写词,javascript,regex,Javascript,Regex,给定一个包含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 incl
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 + ' ';
}, '');
这就完成了所需组合的工作,例如:
- “手动ABC任务”=>“手动ABC任务”
- “ABC手动任务”=>“ABC手动任务”
- “ABC手动DEF任务”=>“ABC手动DEF任务”
我的regex know how不是很好,因此这可能需要在still上进行改进。正如在文章中提到的,在regex中更改为句柄:
initial = 'ManualABCTask'.split(/(['A-Z']{2,99})(['A-Z'][a-z]*)/g).join(' ');
将任何长度为2到99的同时出现的大写字符分组以获得首字母缩写词,将任何单个大写字符后跟任意数量的小写字符以获得其他单词。用空格连接。如本文所述,在正则表达式中改为句柄:
initial = 'ManualABCTask'.split(/(['A-Z']{2,99})(['A-Z'][a-z]*)/g).join(' ');
将任何长度为2到99的同时出现的大写字符分组以获得首字母缩写词,将任何单个大写字符后跟任意数量的小写字符以获得其他单词。用空格连接。有两组:从开头字母开始,用以下小写字母,从开头字母开始,直到下一个字母不是小写字母:
find=newregexp(
"(" +
“[A-Z][A-Z]+”+//以大写字母开头的组,小写字母如下
"|" +
“[A-Z]+(?![A-Z])”+//在下一个字母不是小写之前,用大写字母分组:
")",
“g”
)
初始值='ManualABCTask'。拆分(查找)
分为两组:从大写字母开始,使用以下小写字母;从大写字母开始,直到下一个字母不是小写字母:
find=newregexp(
"(" +
“[A-Z][A-Z]+”+//以大写字母开头的组,小写字母如下
"|" +
“[A-Z]+(?![A-Z])”+//在下一个字母不是小写之前,用大写字母分组:
")",
“g”
)
初始值='ManualABCTask'。拆分(查找)
我对JavaScript
几乎一无所知,但我对它有一个痛击:
let initial = 'ManualABCTask'
initial = initial.replace(/([A-Z][a-z]+)/g, ' $1 ').trim();
我对
JavaScript
几乎一无所知,但我对它有一个猛击:
let initial = 'ManualABCTask'
initial = initial.replace(/([A-Z][a-z]+)/g, ' $1 ').trim();
你应该能够在没有上限的情况下使用
{2,}
!我最初使用了不正确的语法,所以把99卡在了里面。我没意识到它只是需要在逗号后面空白,现在看起来很明显。谢谢。你应该能够使用{2,}
而没有上限。我想这会被接受的!我最初使用了不正确的语法,所以把99卡在了里面。我没意识到它只是需要在逗号后面空白,现在看起来很明显。谢谢。是的,这也很管用。我得好好看看它是怎么做的,谢谢。如果没有这张否定的支票,(?![a-z])
有大写字母的小组会得到一个额外的字母,比如ABCT
。是的,这也很有效。我得好好看看它是怎么做的,谢谢。如果没有这张否定的支票,(?![a-z])
有大写字母的组会得到一个额外的字母,如ABCT
。这就是concise@JMP谢谢使用和探索JavaScript很有趣。希望它能帮到你,那就是concise@JMP谢谢使用和探索JavaScript很有趣。希望它能帮到你。