2016-11-18 21 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