2016-11-18 22 views
-2

我需要在堆栈上收到的以下代码的解释 溢出。用大写字替换字符串函数

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

更新

什么是separatorchar的替换功能的内容?

+3

[MDN替换?](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace) –

+0

https://regex101.com/r/tc6ZPE/ 2 –

+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函数,它只是为函数输入返回一个大写字母。

更新:

分离器在这种情况下的点,虽然它可以是正则表达式匹配功能的任何分隔符,隔板被发现后,字符将是下一个字符。

+0

感谢您的解释。现在我有点清楚了。什么是分隔符和字符。分隔符是否包含。? – Amran

+0

添加了更新@Amran。如果您觉得答案满足您想知道的内容,请将其标记为已接受 – maximdumont