Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将字符串拆分为CamelCase单词和大写首字母缩写词_Javascript_Regex - Fatal编程技术网

Javascript 将字符串拆分为CamelCase单词和大写首字母缩写词

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

给定一个包含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 + ' ';
}, '');
这就完成了所需组合的工作,例如:

  • “手动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很有趣。希望它能帮到你。