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和编程的新手,所以这可能是微不足道的。
答案 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();});
}
我将正则表达式更改为使用单词分隔符,并且是全局的。