使用javascript将slug变量转换为标题文本

时间:2012-01-24 01:01:08

标签: javascript

我正在尝试做一些类似于将类似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?
}

如果可能的话,我不想使用正则表达式来做到这一点,但我认为没有一种方法可以做到这一点。所以任何知道如何做这类事情的人都知道,这将是一个很大的帮助。

由于

4 个答案:

答案 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