有一个函数可以很好地将字符串缩短为一个,两个或三个字母

时间:2015-01-02 23:32:28

标签: javascript

有一个很好的函数/ lib等缩短很好一个字符串(比如ios圈子联系但更多的进化)?

例如:

  • John Doe - > JD
  • 我的主板 - > MB
  • 很长的东西 - > SVL
  • 我的长板 - > MVL
  • 仪表板 - > DB
  • title - >吨
  • 标题 - > Ť
  • JohnDoe - > JD
  • John_Doe - > JD
  • 等............................

我真的可以自己写每个可以看到的情况,但我正在寻找一些不错的东西,也许更多聪明那个我的例子(省略文章了解更多超过3个单词,如果超过3个单词等,则省略短划线。)。

精确度:好看是我的问题。我正在寻找像stringjs.com/underscorejs(normalize,capitalize,slugify ......)这样的库或者一个简单的函数但是有一个很好的缩短方法。

目前,我使用这段代码(更新w / terabaud回答,thx dude):

function shortener(label) {
            //http://www.ranks.nl/stopwords
            var stopWords = "alors au aucuns aussi autre avant avec avoir bon car "
                + "ce cela ces ceux chaque ci comme comment dans des du "
                + "dedans dehors depuis deux devrait doit donc dos droite "
                + "début elle elles en encore essai est et eu fait faites "
                + "fois font force haut hors ici il ils je	juste la le les "
                + "leur là ma maintenant mais mes mine moins mon mot même "
                + "ni nommés notre nous nouveaux ou où par parce parole "
                + "pas personnes peut peu pièce plupart pour pourquoi quand "
                + "que quel quelle quelles quels qui sa sans ses seulement "
                + "si sien son sont sous soyez	sujet sur ta tandis tellement "
                + "tels tes ton tous tout trop très tu valeur voie voient "
                + "vont votre vous vu ça étaient état étions été être";

            var articles = stopWords.split(' ');

            return (label || "")
                .replace(/[A-Z]/g, " $&") // add space before each capital
                .replace(/[_\-']/g, " ") // replace _ - with spaces
                .split(" ")
                .filter(function (word) {
                    return word !== ""
                })
                .map(function (word, idx, arr) {
                    // return the first letter of each word
                    // if there are more than 2 words, omit articles
                    return (arr.length > 2 && articles.indexOf(word.toLowerCase()) > -1) ? "" : word[0];
                }).join("").slice(0, 3);
 
  };
    ["John Doe", "My board", "Something very long", "My Very long board", "Dash-board", "title", "Title", "JohnDoe","avec unwanted Words", "John_Doe"].forEach(function(str) {
      document.body.innerHTML += shortener(str) + '<br>';
    });

4 个答案:

答案 0 :(得分:1)

我会按顺序使用正则表达式:

  1. 在任何资本之前放置空间
  2. 将特殊字符更改为空格
  3. 删除每个单词中第一个字母后面的所有字母
  4. 删除所有空格

答案 1 :(得分:1)

没有简单的方法可以做到这一点。尝试这样的事情:

&#13;
&#13;
var articles = ["the", "a", "an"];

function shorten(str) {
  return (str || "")
    .replace(/[A-Z]/g, " $&") // add space before each capital
    .replace(/[_\-]/g, " ") // replace _ - with spaces
    .split(" ")
    .filter(function (word) { return word !== "" })
    .map(function(word, idx, arr) {
      // return the first letter of each word
      // if there are more than 3 words, omit articles
      return arr.length > 3 &&
        articles.indexOf(word.toLowerCase()) > -1 ?
        "" : word[0];
    }).join("").slice(0, 3);
}

["John Doe", "My board", 
 "Something very long", 
 "My Very long board",
 "Dash-board", 
 "title", 
 "Title", 
 "JohnDoe", 
 "John_Doe"].forEach(function(title) {
  document.body.innerHTML += shorten(title) + '<br>';
});
&#13;
&#13;
&#13;

答案 2 :(得分:1)

我不确定这是不是你想要的:请在下面评论

"My Very Long Board".split(' ').map(function(word){
 return word[0];
}).join('').slice(0, 3)

答案 3 :(得分:0)

如何在存储indexOf的变量上使用String来查找:

空格,大写字母或破折号的前三个实例。

这三个字母会给你一个很好的缩短。