2010-11-01 3 views
4

Id нравится знать, как я могу скрывать строку в строку паскаля в javascript (& наиболее вероятное регулярное выражение).Преобразование строки в Pascal Case (aka UpperCamelCase) в Javascript

Примеры преобразования:

  • двуствольный = Двуствольный
  • Двуствольные = Двуствольный
  • Двуствольных = Двуствольный
  • двустволка = Двойной Баррель

Отметьте this link для получения более подробной информации о Case Pascal

ответ

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

Регулярное выражение находит слова (здесь определяется с помощью \w - alphanumerics и подчеркивание) и разделяет их на две группы - первую букву и остальную часть слова. Затем он использует функцию в качестве обратного вызова для установки правильного случая.

Пример: http://jsbin.com/uvase

С другой стороны, это также будет работать - немного меньше регулярных выражений и больше строк манипуляции:

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

Я должен добавить, что это не паскаль случай вообще, так как у вас есть слово барьеры (helloworld против hello-world). Без них проблема почти неразрешима даже со словарем. Это чаще всего называется Title Case, хотя оно не обрабатывает такие слова, как «FBI», «the» или «McDonalds».

+0

пятно на, хотя я думаю Название дело отличается от Pascal Case (Uppercamelcase) заглавных = Double -barrel Pascal Case = Double-Barrel – Blowsie

+0

Титульный вопрос потенциально обманчив. Он имеет четкое значение, которое не соответствует нормальному английскому языку. Titlecase - свойство оболочки Unicode, в основном используется для того, чтобы заглавная буква была только первой буквой. Это относится к некоторым орграфам, отличным от других символов, таких как DZ vs Dz vs dz. Напротив, правильная обложка английских названий работает совсем по-другому, игнорируя короткие предлоги, за исключением первого или последнего слова и т. Д. – tchrist

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' 
Смежные вопросы