2016-01-23 24 views
-1

我試圖將字符串中每個單詞的第一個字母作爲目標。我正在使用JavaScript。我發現Python和PHP的討論沒有解決我特有的JavaScript問題。JavaScript reg前撇號是新單詞邊界

str = "i'm a little tea pot" 

regEx = /^.|\b[a-z]/g 

我有一個函數,大寫每個字母regEx發現。我的結果是撇號大寫後的m。我如何避免這種情況?

大寫功能後: 我有點茗壺」

+0

嘗試'(^ | \ s)[a-z]' –

回答

1

大寫每個單詞的第一個字母

var string = prompt("Enter a string"); 
 

 
function capitalizeFirstWord(str) { 
 
    return str.split(/\s+/).map(function(word) { 
 
     return word[0].toUpperCase() + word.slice(1).toLowerCase(); 
 
    }).join(' '); 
 
} 
 

 
document.getElementById("capitalized").innerHTML = capitalizeFirstWord(string);
<p id="capitalized"></p>

你在單詞邊界分割字符串?。作爲一個參數,你傳遞一個空字符串或空白字符\s。這將創建一個句子中所有單詞的數組。

要獲得第一個字符,可以使用word[0]word.charAt(0)。然後用字符串的其餘部分執行字符串連接。

這給你一個全新的數組,它需要被轉換回一個字符串。在此新陣列上調用聯接方法

0

您可以在str.replace中使用回撥功能。

var str = "i'm a little tea pot" 
 
alert(str.replace(/(^|\s)([a-z])/g, function(match, group_1, group_2){return group_1 + group_2.toUpperCase()}))

而且如果你還想要的字符轉換的第一個字符爲小寫再試試這個下面。

str.replace(/(^|\s)([a-z])(\S*)/g, function(x,y, z, a){return y + z.toUpperCase() + a.toLowerCase()}) 
+1

我認爲這是一個很好的答案。不過,我個人不喜歡使用像x,y和z這樣的變量名。我會用更具描述性的東西。我也不認爲這個函數應該被創建爲第二個參數。然而,它背後的邏輯看起來不錯 –