2010-11-01 42 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'