Заменить символы подчеркивания пробелами и заглавные слова
Я пытаюсь создать способ преобразования текста с строчными буквами и подчеркивания в текст без подчеркивания, а первая буква каждого слова заглавная.
ех;
options_page = Options Page
На этой странице: Как сделать первый символ в верхнем регистре всех слов в JavaScript?
Я нашел это регулярное выражение:
key = key.replace(/(?:_| |\b)(\w)/g, function(key, p1) { return p1.toUpperCase()});
Это делает все, кроме замены подчеркиваний пробелами. Я ничего не пробовал, потому что я не знаком с регулярными выражениями.
Как настроить это регулярное выражение так, чтобы он заменял символы подчеркивания пробелами?
Ответы
Ответ 1
Это должно сделать трюк:
function humanize(str) {
var frags = str.split('_');
for (i=0; i<frags.length; i++) {
frags[i] = frags[i].charAt(0).toUpperCase() + frags[i].slice(1);
}
return frags.join(' ');
}
humanize('humpdey_dumpdey');
// > Humpdey Dumpdey
РЕПЛ
http://repl.it/OnE
Fiddle
http://jsfiddle.net/marionebl/nf4NG/
JSPerf
Большинство тестовых данных: http://jsperf.com/string-transformations
Все версии плюс _.str: http://jsperf.com/string-transformations/3
Ответ 2
Это две разные задачи, поэтому два разных регулярных выражения - лучшее решение:
key = key.replace(/_/g, ' ').replace(/(?: |\b)(\w)/g, function(key) { return key.toUpperCase()});
Чтобы гарантировать, что даже все заглавные слова обрабатываются. Вы можете добавить .toLowerCase()
до самого первого .replace
:
console.log('TESTING_WORD'.toLowerCase().replace(/_/g, ' ')
.replace(/(?: |\b)(\w)/g, function(key, p1) {
return key.toUpperCase();
}));
Ответ 3
Здесь:
var str = 'Lorem_ipsum_dolor_sit_amet,_consectetur____adipiscing_elit.'
str = str.replace(/_{1,}/g,' ').replace(/(\s{1,}|\b)(\w)/g, function(m, space, letter)
{
return space + letter.toUpperCase();
})
console.log(str);
Ответ 4
Начиная с Lodash 3.1.0, существует _.startCase([string=''])
который преобразует любой регистр в прописные слова (стартовый регистр):
_.startCase('hello_world'); // returns 'Hello World'
_.startCase('hello-world'); // returns 'Hello World'
_.startCase('hello world'); // returns 'Hello World'
В разделе String Lodash есть и другие полезные методы. Прочитайте документацию здесь.
Ответ 5
Другая альтернатива:
'options_page'.replace(/(^|_)(\w)/g, function ($0, $1, $2) {
return ($1 && ' ') + $2.toUpperCase();
});
Регулярное выражение:
(^|_) beginning of the input OR "_" ($1)
(\w) a word character (short for [a-zA-Z0-9_]) ($2)
g all occurences
Подробнее о регулярных выражениях: http://www.javascriptkit.com/javatutors/redev.shtml.
Ответ 6
Просто добавьте. replace('_',' ')
Как этот
function toCamel(string){
return string.replace(/(?:_| |\b)(\w)/g, function($1){return $1.toUpperCase().replace('_',' ');});
}