函数生成字符串

function to make string CamelCase

本文关键字:字符串 函数      更新时间:2023-09-26

我需要一个函数,使字符串camelcase仅使用javascript。我想让它不包含split之类的内置函数。请附上解释。

如果我有"dean john"我想把它改成"dean john"

var myString = "Hello world!";
var myArray = [];
var out= ""
for (var i=0; i < myString.length; i++){
    myArray.push(myString[i]);
    //myArray.pop(myString[i]);
    myArray[0].toUpperCase();
}
alert(myArray)
所需输出:

H W ,

我不想使用split或任何其他内置函数

使用regex:

str.replace(/(^ *| +)(.)/g, function(v,p1,p2){return p1+p2.toUpperCase()})

使用for循环,你可以这样做:

var u=true, r=''
for(var i=0; i < str.length; i++){
  c=str[i]
  r+=u?c.toUpperCase():c
  u=(c==' ')
}

如果要显示为HTML,可以使用CSS

.capitalize-all-words {
    text-transform: capitalize;
}

在你的视图

<span class='capitalize-all-words'>hello world</span>

还有一种方法,使用边界:'b

' b匹配零宽度的单词边界,例如在字母和空格之间。(不要与['b]混淆)

例如,/'bno/匹配"at noon"中的"no";/ly'b/匹配"possibly yesterday"中的"ly"

所以regex可以像这样

myString.replace(/'b('w)/g,function(m,p1){ return p1.toUpperCase();})

希望这对你有帮助!

String.prototype.toTitleCase = function(){
  var smallWords = /^(a|an|and|as|at|but|by|en|for|if|in|nor|of|on|or|per|the|to|vs?'.?|via)$/i;
  return this.replace(/[A-Za-z0-9'u00C0-'u00FF]+[^'s-]*/g, function(match, index, title){
    if (index > 0 && index + match.length !== title.length &&
      match.search(smallWords) > -1 && title.charAt(index - 2) !== ":" &&
      (title.charAt(index + match.length) !== '-' || title.charAt(index - 1) === '-') &&
      title.charAt(index - 1).search(/[^'s-]/) < 0) {
      return match.toLowerCase();
    }
    if (match.substr(1).search(/[A-Z]|'../) > -1) {
      return match;
    }
    return match.charAt(0).toUpperCase() + match.substr(1);
  });
};
document.getElementById("rawText").innerHTML = document.getElementById("rawText").innerHTML.toTitleCase();
<div id="rawText">sdfdsfsd sdfsdf awwads</div>