如何正确组合正则表达式和替换方法,以大写单词



我正在尝试将字符串的第一个单词大写

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")

相关内容

最新更新