2010-11-01 99 views

回答

14
s = s.replace(/(\w)(\w*)/g, 
     function(g0,g1,g2){return g1.toUpperCase() + g2.toLowerCase();}); 

正則表達式查找單詞(這裏使用\w - 字母數字和下劃線定義),並將它們分爲兩組 - 第一個字母和單詞的其餘部分。然後它使用一個函數作爲回調來設置正確的大小寫。

例子:http://jsbin.com/uvase

或者,這也將工作 - 少一點正則表達式多字符串操作:

s = s.replace(/\w+/g, 
     function(w){return w[0].toUpperCase() + w.slice(1).toLowerCase();}); 

我要補充這不是帕斯卡情況可言,因爲你有話障礙(helloworld vs hello-world)。如果沒有他們,這個問題幾乎無法解決,即使是用字典。這通常稱爲標題案例,雖然它不處理「FBI」,「the」或「McDonalds」等詞。

+0

現貨方面,雖然我覺得標題案例是Pascal大小寫(Uppercamelcase) 標題案例=雙不同 - 桶 帕斯卡案件=雙桶 – Blowsie 2010-11-01 12:05:37

+0

標題案件可能具有誤導性。它有一個明顯的含義,不符合正常的英語。 Titlecase是一個Unicode套管屬性,主要用於只有第一個字母應大寫。它適用於某些有向圖與其他角色不同,如DZvsDzvsdz。相比之下,英文標題的適當格式的工作方式卻完全不同,忽略了簡短的介詞,除了第一個或最後一個單詞等。 – tchrist 2010-11-01 16:10:23

0

如果你知道第二個字,您可以:

function pascal (str, match) { 
return str.split(' ').map(function(word){ 
    let i = word.search(match); 
    return word.charAt(0).toUpperCase() + word.slice(1, i - 1) + word.charAt(i).toUpperCase() + word.slice(i + 1); 
    }).join(''); 

} 

例如:在

pascal('someservice', 'service') // 'SomeService'