Javascript 我遇到以下错误:无法调用方法';更换';在String.toJadenCase处未定义的

Javascript 我遇到以下错误:无法调用方法';更换';在String.toJadenCase处未定义的,javascript,regex,string,uppercase,Javascript,Regex,String,Uppercase,当我传递字符串“如果我们的眼睛不是真的,镜子怎么可能是真的”作为参数时,我得到了错误。它应该返回大写的每个单词,如:“如果我们的眼睛不是真的,镜子怎么可能是真的” 一般来说,我对JS和编程都是新手,所以这可能很简单 toJadenCase方法正在字符串的上下文中运行,因此使用this关键字检索文本。您还需要稍微修改一下正则表达式: String.prototype.toJadenCase=函数(){ 返回this.replace(/\w\S*/g,函数(txt){return txt.char

当我传递字符串“如果我们的眼睛不是真的,镜子怎么可能是真的”作为参数时,我得到了错误。它应该返回大写的每个单词,如:“如果我们的眼睛不是真的,镜子怎么可能是真的”


一般来说,我对JS和编程都是新手,所以这可能很简单

toJadenCase方法正在
字符串的上下文中运行,因此使用
this
关键字检索文本。您还需要稍微修改一下正则表达式:

String.prototype.toJadenCase=函数(){
返回this.replace(/\w\S*/g,函数(txt){return txt.charAt(0.toUpperCase()+txt.substr(1.toLowerCase();});
}
var copy=“如果我们的眼睛不是真的,镜子怎么可能是真的”;

警报(copy.toJadenCase())因为您的函数需要一个参数,所以调用它的方法是:

String.prototype.toJadenCase = function (str) {
  //...
 var capitalize = str; 

 return capitalize.replace(/^[a-zA-Z]*$/, function(txt){
     return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();});
}
这不是你想要的

但是,如果您改用
,它将起作用:

myStr.toJadenCase(myStr);

(这消除了错误,但您的案例更改代码未按预期工作)

您可以使用
而无需参数。正则表达式
\b
匹配单词边界处的字符

return this.replace(/^[a-zA-Z]*$/, function(txt){
    return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();
});
正则表达式不处理特殊情况,因为
不是
。必须匹配后跟字符的空格。因此,您可以使用

String.prototype.toJadenCase = function () {
    return this.replace(/\b./g, function(m){ 
        return m.toUpperCase();    
    });
}
或者更具体地说,您可以使用
/\s[a-zA-Z]/g

您可以看到regex正在运行

用法

String.prototype.toJadenCase = function () {
    return this.replace(/\s./g, function(m){ 
        return m.toUpperCase();    
    });
}

您想让它使用此
,而且您的正则表达式是错误的

str = "How can mirrors be real if our eyes aren't real";
console.log(str.toJadenCase());
我将正则表达式改为使用单词分隔符,并且是全局的

function () {

 return this.replace(/\b[a-zA-Z]*\b/g, function(txt){
     return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();});
}