我正在尝试将字符串的第一个单词大写
function titleCase(str) {
var newStr = str.split(" ");
//TeSt 10 array newStr
for (var i = 0; i < str.length; i++) {
//
(newStr[i][0].replace(new RegExp("[a-z]"), new RegExp("[A-Z]")))
}
}
titleCase("I´m a little tea pot")
我对正则表达式感到非常困惑,所以我知道的代码是错误的,但我想知道是否有可能像这样接近地做到这一点。所以基本上一旦找到每个单词的第一个字母(newStr[i][0]),我就想.replace(the noncaps to caps)
。
我知道RegExp
可能非常错误,但是,这样的事情能奏效吗?组合替换而不是放置要替换的文字字符串(因为这已经在newStr[i][0]
中完成)使用正则表达式执行此操作
您可以匹配第一个字符并使用替换函数:
newStr[i] = newStr[i].replace(/[a-z]/, it => it.toUpperCase());
但是你为什么不做:
newStr[i] = newStr[i][0].toUpperCase() + newStr[i].slice(1);
您也可以使用正则表达式来替换所有出现的情况:
"test test".replace(/(^| )[a-z]/g, it => it.toUpperCase()))
解释:
(^| ) -> 位于字符串 (^) 的开头,或 (|) 位于空格 ( ) 之后
[a-z] -> 是一个字母
/g -> 应用于所有找到的字符
replace
函数有两个参数:模式和替换。模式是要搜索的内容,可以是固定字符串或正则表达式。替换可以是字符串(可以选择使用可以按原样复制到替换中的组占位符),也可以是函数(在可以生成替换的内容方面更加灵活)。它不能是正则表达式,这就是代码无法正常工作的原因。
简单的复制粘贴不能将小写字母变成大写字母,因此您必须使用替换器函数:
newStr[i] = newStr[i].replace(new RegExp("[a-z]"),
function(match) { return match.toUpperCase(); }
)
但是,如果您只是让正则表达式查找分词符,则可以避免拆分:bw
将查找遵循单词边界的单词字符(a-z,A-Z,0-9或_)(即在字符串的开头或非单词字符之后)。您还寻找数字和下划线并不重要,因为它们不会因大写而改变。您还可以使用新的函数语法和正则表达式文本语法来缩短代码:
str = str.replace(/bw/, alnum => alnum.toUpperCase());
更简短:
console.log(
"I´m a little tea pot".replace(/bw/g, word => word.toUpperCase())
);
或者,使用函数:
function titleCase(str) {
return str.replace(/bw/g, word => word.toUpperCase());
}
titleCase("I´m a little tea pot")