2016-02-19 2 views
0

мне нужно капитализировать имена в JavaScript и до сих пор я нашел эти методы на SO:заглавной дефис имен в JavaScript

// doesn't capitalize first letter after hyphen -> gives Bjørn-martin 
str.replace(/\w\S*/g, function (txt) { return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase(); }); 

// capitalizes after hyphen, but also after funny Norwegian characters (æøå) -> gives BjøRn-Martin 
str.replace(/\b[\w']+\b/g, function (txt) { return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase(); }); 

// same as first 
str = str.toLowerCase().replace(/^[\u00C0-\u1FFF\u2C00-\uD7FF\w]|\s[\u00C0-\u1FFF\u2C00-\uD7FF\w]/g, function(letter) { 
    return letter.toUpperCase(); 
}); 

При попытке не капитализировать bjørn-martin ни один из них обрабатывает оба смешные норвежских символов и дефис.

Я не совсем хорошо разбираюсь в регулярном выражении и задавался вопросом, может ли кто-нибудь указать мне в правильном направлении, чтобы bjørn-martin правильно заглавны до Bjørn-Martin.

+0

Считаете ли вы, используя [XRegExp] (http://xregexp.com/)? –

ответ

5

Это должно удовлетворить ваши потребности:

var capitalized = input.replace(/(^|[\s-])\S/g, function (match) { 
    return match.toUpperCase(); 
}); 
+0

Это не будет работать во всех возможных ситуациях. Вы должны добавить предположения к ответу. –

+0

@ WiktorStribiżew Я считаю, что он обрабатывает * оба забавных норвежских персонажа и дефис *, как спрашивает OP, если у меня не хватает случаев с краями? – sp00m

+0

Я нашел случай, когда он не будет работать. «james bond» дает «связь Джеймса». Я не упоминал об этом в вопросе, но я думал, что было очевидно, что не только первое имя должно быть заглавным :) – Eirik

0

Вот настраиваемый метод. Это позволит вам указать разделители слов.

шаблон вам нужно: /(^|-)(\w)/g

function transformToUpperCase(str, separators) { 
 
    separators = separators || [ ' ' ]; 
 
    var regex = new RegExp('(^|[' + separators.join('') + '])(\\w)', 'g'); 
 
    return str.toLowerCase().replace(regex, function(x) { return x.toUpperCase(); }); 
 
} 
 

 
document.body.innerHTML = transformToUpperCase('bjørn-martin', ['-']);

+0

Это не будет работать, если имя начинается с «смешной» буквы. –

+0

И вы должны regex-escape сепараторы, так как их можно интерпретировать как метамарки, например. '['^', '-']' или '['a', '-', 'z']'. – sp00m