简体   繁体   English

在 Javascript 中拆分 Pascal 大小写(某些情况)

[英]Split Pascal Case in Javascript (Certain Case)

I've been trying to get a JavaScript regex command to turn something like EYDLessThan5Days into EYD Less Than 5 Days .我一直在尝试使用 JavaScript 正则表达式命令将EYDLessThan5Days 之类的内容转换为EYD Less Than5Days Any ideas?有任何想法吗?

The code I used :我使用的代码:

"EYDLessThan5Days"
    .replace(/([A-Z])/g, ' $1')
    .replace(/^./, function(str){ return str.toUpperCase(); });

Out: EYD Less Than5 Days出局: EYD 少于 5 天
But still give me wrong result.但仍然给我错误的结果。

Please help me.请帮我。 Thanks.谢谢。

Try the following function, it's made to work with all kinds of strings you can throw at it.试试下面的函数,它可以处理你可以抛出的各种字符串。 If you find any defects please point it out in the comments.如果您发现任何缺陷,请在评论中指出。

 function camelPad(str){ return str // Look for long acronyms and filter out the last letter .replace(/([AZ]+)([AZ][az])/g, ' $1 $2') // Look for lower-case letters followed by upper-case letters .replace(/([az\\d])([AZ])/g, '$1 $2') // Look for lower-case letters followed by numbers .replace(/([a-zA-Z])(\\d)/g, '$1 $2') .replace(/^./, function(str){ return str.toUpperCase(); }) // Remove any white space left around the word .trim(); } // Test cases document.body.appendChild(document.createTextNode(camelPad("EYDLessThan5Days"))); document.body.appendChild(document.createElement('br')); document.body.appendChild(document.createTextNode(camelPad("LOLAllDayFrom10To9"))); document.body.appendChild(document.createElement('br')); document.body.appendChild(document.createTextNode(camelPad("ILikeToStayUpTil9O'clock"))); document.body.appendChild(document.createElement('br')); document.body.appendChild(document.createTextNode(camelPad("WhatRYouDoing?"))); 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")));

This will work for you这对你有用

"EYDLessThan5Days".replace(/([A-Z][a-z])/g,' $1').replace(/(\d)/g,' $1');

will give you "EYD Less Than 5 Days"会给你“EYD 少于 5 天”

What I am doing here我在这里做什么

replace(/([A-Z][a-z])/g,' $1')

If a Upper case letter followed by lower case letters, add space before that如果大写字母后跟小写字母,则在此之前添加空格

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

If there is a number add space before that.如果有数字,则在此之前添加空格。

Was looking for solution and stumbled upon this post.正在寻找解决方案并偶然发现了这篇文章。 Ended up using lodash.最终使用 lodash。

For those who don't want to use Regex, there is a method in lodash library called "startCase"对于那些不想使用 Regex 的人,lodash 库中有一个名为“startCase”的方法

https://lodash.com/docs/4.17.15#startCase https://lodash.com/docs/4.17.15#startCase

_.startCase('EYDLessThan5Days'); // "EYD Less Than 5 Days"

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM