我正在尝试做一些类似于将类似url slug的变量转换为可用于标题的文本的内容。
所以,我有一个变量,例如:
var thisID = 'athlete-profile';
function myFunc(thisID) {
// i need to use thisID as the id and href in a loop that generates a string of <li><a>'s\
function makeTitle(thisID) {
// convert thisID to text so for this example it would return 'Athlete Profile'
return 'Athlete Profile';
}
for () {
var str = '<li id="'+thisID+'"><a href="#'+thisId+'">'+makeTitle(thisID)+'</a>';
}
// make sense?
}
如果可能的话,我不想使用正则表达式来做到这一点,但我认为没有一种方法可以做到这一点。所以任何知道如何做这类事情的人都知道,这将是一个很大的帮助。
由于
答案 0 :(得分:5)
function titleize(slug) {
var words = slug.split("-");
return words.map(function(word) {
return word.charAt(0).toUpperCase() + word.substring(1).toLowerCase();
}).join(' ');
}
它非常简单:
-
拆分为单词。答案 1 :(得分:2)
我建议你使用正则表达式。但是如果你真的不想使用正则表达式,下面的解决方案适用于simple
个案例。随意修改它。
function makeTitle(slug) {
var words = slug.split('-');
for(var i = 0; i < words.length; i++) {
var word = words[i];
words[i] = word.charAt(0).toUpperCase() + word.slice(1);
}
return words.join(' ');
}
答案 2 :(得分:1)
问题的makeTitle()
部分可以实现如下:
function makeTitle(thisID) {
return thisID.replace(/-/g, " ").replace(/\b[a-z]/g, function () {
return arguments[0].toUpperCase();
});
}
第一个.replace()
将所有连字符更改为空格,然后第二个.replace()
采用任何跟在单词边界之后的小写字母并将其设为大写。
(有关详细信息,请参阅MDN doco for .replace()
。)
就不使用正则表达式而言,我不确定为什么你特别想要避免它们,特别是在这种情况下所需的表达式非常简单时(特别是如果你将连字符用于空格和第一个)字母大写分两步,如上所示)。但是,如果没有使用JavaScript string manipulation methods的各种组合的正则表达式,有无穷无尽的方法可以做到这一点。
答案 3 :(得分:1)
一行:
'athlete-profile'.split("-").join(" ").replace(/\w\S*/g, function(txt){return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase()})
输出:Athlete Profile