我收到此错误:无法在String.toJadenCase中调用undefined方法'replace'

时间:2015-01-25 12:20:22

标签: javascript regex string uppercase

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();});
}

当我通过字符串“如果我们的眼睛不真实时镜子是如何真实”作为参数我得到错误。它应该将每个词大写为大写:“如果我们的眼睛不是真实的话,镜子怎么能变得真实”。

我是JS和编程的新手,所以这可能是微不足道的。

4 个答案:

答案 0 :(得分:0)

toJadenCase方法在String的上下文中运行,因此请使用this关键字检索文本。你还需要摆弄你的正则表达式:

String.prototype.toJadenCase = function () {
        return this.replace(/\w\S*/g, function(txt){return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();});
}

var copy = "How can mirrors be real if our eyes aren't real";

alert(copy.toJadenCase());

请注意,这可以优雅地处理您的逗号。

答案 1 :(得分:0)

由于您的函数需要一个参数,因此调用它的方法是:

myStr.toJadenCase(myStr);

这不是你想要的。

但是,如果您使用this代替它,它将起作用:

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

(这解决了错误,但是你的案例更改代码没有按预期工作)

答案 2 :(得分:0)

您可以在不需要参数的情况下使用this。正则表达式\b匹配单词边界处的字符。

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

正则表达式并不像aren't那样处理特殊情况。你必须匹配一个空格后跟一个字符。为此,您可以改为使用

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

或者更具体地说,您可以使用/\s[a-zA-Z]/g

您可以在行动here中看到正则表达式。

<强>用法

str = "How can mirrors be real if our eyes aren't real";
console.log(str.toJadenCase());

答案 3 :(得分:-1)

你想让它使用this,而且你的正则表达式是错误的。

function () {

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

我将正则表达式更改为使用单词分隔符,并且是全局的。