我需要解释我在Stack Overflow上收到的以下代码。
function sentenceCase(input, lowercaseBefore) {
input = ( input === undefined || input === null ) ? '' : input;
if (lowercaseBefore) {
input = input.toLowerCase();
}
return input.toString().replace( /(^|\. *)([a-z])/g,
function(match, separator, char) {
return separator + char.toUpperCase();
});
}
var str = 'this is a text. hello world!';
str = sentenceCase(str);
document.write(str);
代码将使字符串在每个点(。)符号后大写。有人可以解释替换功能的工作原理:
return input.toString().replace( /(^|\. *)([a-z])/g,
function(match, separator, char) {
return separator + char.toUpperCase();
});
更新
替换功能上separator
和char
的内容是什么?
答案 0 :(得分:1)
input = ( input === undefined || input === null ) ? '' : input;
检查输入是空还是空
return input.toString().replace( /(^|\. *)([a-z])/g,
function(match, separator, char) {
return separator + char.toUpperCase();
});
这使用正则表达式来匹配点后跟小写字符的所有情况,最值得注意的是
/(^|\. *)([a-z])/g
首先看一下。然后在它之后查找a-z之间的任何字符。请注意,如果他们完成[a-z] [A-Z],该功能将无效。
function(match, separator, char) {
return separator + char.toUpperCase();
}
一个简单的lambda,只返回函数输入的大写字母。
更新
分隔符在这种情况下是点,虽然它可以是与正则表达式函数匹配的任何分隔符,而char是找到分隔符后的下一个字符。