Javascript中的拆分Pascal大小写(特定大小写)

Javascript中的拆分Pascal大小写(特定大小写),javascript,jquery,string,Javascript,Jquery,String,我一直在尝试使用JavaScript正则表达式命令将EYDLessThan5Days转换为EYD小于5days。有什么想法吗 我使用的代码是: "EYDLessThan5Days" .replace(/([A-Z])/g, ' $1') .replace(/^./, function(str){ return str.toUpperCase(); }); 外出时间:E不到5天 但还是给了我错误的结果 请帮帮我。谢谢。试试下面的函数,它可以处理各种各样的字符串。如果您发现任何缺

我一直在尝试使用JavaScript正则表达式命令将EYDLessThan5Days转换为EYD小于5days。有什么想法吗

我使用的代码是:

"EYDLessThan5Days"
    .replace(/([A-Z])/g, ' $1')
    .replace(/^./, function(str){ return str.toUpperCase(); });
外出时间:E不到5天
但还是给了我错误的结果


请帮帮我。谢谢。

试试下面的函数,它可以处理各种各样的字符串。如果您发现任何缺陷,请在评论中指出

函数camelPad(str){return str
//查找长首字母缩写词并过滤掉最后一个字母
.替换(/([A-Z]+)([A-Z][A-Z])/g,“$1$2”)
//查找小写字母,后跟大写字母
.替换(/([a-z\d])([a-z])/g,“$1$2”)
//查找小写字母和数字
.替换(/([a-zA-Z])(\d)/g,'1$2')
.replace(/^./,函数(str){return str.toUpperCase();})
//删除单词周围的所有空白
.trim();
}
//测试用例
document.body.appendChild(document.createTextNode(camelPad(“EYDLessThan5Days”));
document.body.appendChild(document.createElement('br'));
document.body.appendChild(document.createTextNode(camelPad(“loalldayFrom10到9”));
document.body.appendChild(document.createElement('br'));
document.body.appendChild(document.createTextNode(camelPad(“ILikeToStayUpTil9O”));
document.body.appendChild(document.createElement('br'));
document.body.appendChild(document.createTextNode(camelPad(“WhatryYouDoing?”));
document.body.appendChild(document.createElement('br'));
document.body.appendChild(document.createTextNode(camelPad(“ABC”));
document.body.appendChild(document.createElement('br'));
document.body.appendChild(document.createTextNode(camelPad(“ABCDEF”))这将适用于您

"EYDLessThan5Days".replace(/([A-Z][a-z])/g,' $1').replace(/(\d)/g,' $1');
将给您“少于5天的EYD”

我在这里做什么 如果大写字母后跟小写字母,请在其前面添加空格

replace(/(\d)/g,' $1')

如果有数字,请在前面加空格。

正在寻找解决方案,无意中发现了这篇文章。最终使用了洛达斯

对于那些不想使用正则表达式的人,lodash库中有一个名为“startCase”的方法


谢谢@djdavid98,我所有的测试用例都可以通过你的解决方案解决。这不适用于像“ABC”这样的3个字母的首字母缩略词。它将它转换为“AB C”@Superdumbell检查我的编辑,我相信它可以满足你的需要。我看到你的答案的唯一问题是op只提供了字符串作为示例,虽然您的代码确实适用于这个特定的示例,但如果字符串是
“it'sOver9000And1”
,则会失败,因为缺少
g
标志,它将变成
“it's Over 9000 And1”
,但如果您添加它,那么它将变成
“it's Over 9 00 and 1”
。只要字符串中只有1个数字,它就可以工作,但另一种失败的情况是
“iamagy”
,只留下
I
A
,因为后面没有小写字母。对于那些不想
npm I lodash
的人,只为这个函数。
replace(/(\d)/g,' $1')
_.startCase('EYDLessThan5Days'); // "EYD Less Than 5 Days"