我如何转换字符串既像'helloThere'或'helloThere'到'HelloThere'在JavaScript?
当前回答
我认为这可以用reg exp /([a-z]|[a-z] +)([a-z])/g和替换“$1 $2”来完成。
我爱美国的毒品
其他回答
添加了另一个ES6解决方案,我更喜欢上面的一些想法。
https://codepen.io/902Labs/pen/mxdxRv?editors=0010#0
const camelize = (str) => str
.split(' ')
.map(([first, ...theRest]) => (
`${first.toUpperCase()}${theRest.join('').toLowerCase()}`)
)
.join(' ');
这是我的版本。它在每个小写英文字母后面的大写英文字母之前增加一个空格,如果需要,还会将第一个字母大写:
例如: This IsCamelCase——> This IsCamelCase 这是骆驼案——>这是骆驼案 This IsCamelCase123——>
function camelCaseToTitleCase(camelCase){
if (camelCase == null || camelCase == "") {
return camelCase;
}
camelCase = camelCase.trim();
var newText = "";
for (var i = 0; i < camelCase.length; i++) {
if (/[A-Z]/.test(camelCase[i])
&& i != 0
&& /[a-z]/.test(camelCase[i-1])) {
newText += " ";
}
if (i == 0 && /[a-z]/.test(camelCase[i]))
{
newText += camelCase[i].toUpperCase();
} else {
newText += camelCase[i];
}
}
return newText;
}
输入 javaScript
输出 Java脚本
var text = 'javaScript';
text.replace(/([a-z])([A-Z][a-z])/g, "$1 $2").charAt(0).toUpperCase()+text.slice(1).replace(/([a-z])([A-Z][a-z])/g, "$1 $2");
好吧,我在这个游戏上晚了几年,但我有一个类似的问题,我想为每一个可能的输入提供一个替换的解决方案。我必须把大部分功劳归功于本帖中的@ZenMaster和本帖中的@Benjamin Udink ten Cate。 代码如下:
var camelEdges = /([A-Z](?=[A-Z][a-z])|[^A-Z](?=[A-Z])|[a-zA-Z](?=[^a-zA-Z]))/g;
var textArray = ["lowercase",
"Class",
"MyClass",
"HTML",
"PDFLoader",
"AString",
"SimpleXMLParser",
"GL11Version",
"99Bottles",
"May5",
"BFG9000"];
var text;
var resultArray = [];
for (var i = 0; i < textArray.length; i++){
text = textArray[i];
text = text.replace(camelEdges,'$1 ');
text = text.charAt(0).toUpperCase() + text.slice(1);
resultArray.push(text);
}
它有三个子句,都使用了lookahead来防止正则表达式引擎消耗太多字符:
[a-z] (?=[a-z] [a-z])查找一个大写字母,后面跟着一个大写字母,然后是小写字母。这将终结像USA这样的缩写词。 [^ a - z](?=[a - z])查找一个非大写字母后跟一个大写字母。这结束了像myWord这样的单词和像99Bottles这样的符号。 [a- za -z](?=[^a- za -z])查找一个字母后面跟着一个非字母。它以像BFG9000这样的符号前的单词结尾。
这个问题在我的搜索结果的顶部,所以希望我可以为其他人节省一些时间!
卧底C程序员。如果你像我一样想保留首字母缩略词,不想看神秘的模式,那么你可能会喜欢这个:
function isUpperCase (str) {
return str === str.toUpperCase()
}
export function camelCaseToTitle (str) {
for (let i = str.length - 1; i > 0; i--) {
if (!isUpperCase(str[i - 1]) && isUpperCase(str[i])) {
str = str.slice(0, i) + ' ' + str.slice(i)
}
}
return str.charAt(0).toUpperCase() + str.slice(1)
}