首页 文章

在Javascript中获取字符串中每个单词的第一个字母

提问于
浏览
33

你会如何收集字符串中每个单词的第一个字母,如收到缩写?

String: "Java Script Object Notation"
Wanted result: "JSON"

13 回答

  • 0

    我认为你要找的是提供的字符串的首字母缩写 .

    var str = "Java Script Object Notation";
    var matches = str.match(/\b(\w)/g); // ['J','S','O','N']
    var acronym = matches.join(''); // JSON
    
    console.log(acronym)
    

    Note: 对于带连字符/撇号的单词,这将失败 Help-me I'm Dieing 将为 HmImD . 如果这不是你想要的,那么空间分割, grab 第一个字母的方法可能就是你想要的 .

    这是一个简单的例子:

    let str = "Java Script Object Notation";
    let acronym = str.split(/\s/).reduce((response,word)=> response+=word.slice(0,1),'')
    
    console.log(acronym);
    
  • 1

    我想你可以这样做

    'Aa Bb'.match(/\b\w/g).join('')
    

    Explanation: 获取所有 /g 在非字母数字字符后出现的字母数字字符 \w (即:在字边界 \b 之后),将它们放在一个带有 .match() 的数组上,并将所有内容连接到一个字符串中 .join('')


    根据您的要求,您还可以考虑简单地选择所有大写字符:

    'JavaScript Object Notation'.match(/[A-Z]/g).join('')
    
  • 0

    没有正则表达式的最简单方法

    var abbr = "Java Script Object Notation".split(' ').map(function(item){return item[0]}).join('');
    
  • 15

    使用 map (来自函数式编程)

    'use strict';
    
    function acronym(words)
    {
        if (!words) { return ''; }
    
        var first_letter = function(x){ if (x) { return x[0]; } else { return ''; }};
    
        return words.split(' ').map(first_letter).join('');
    }
    
  • 2

    @BotNet缺陷:我认为我在经历了3天的正则表达式教程之后解决了它:

    ==>我是一个动物

    (因为单词边界,我常常 grab 我的m),这似乎对我有用 .

    /(\s|^)([a-z])/gi
    
  • 2

    使用 ES6 非常简单

    string.split(' ').map(i => i.charAt(0))               //Inherit case of each letter
    string.split(' ').map(i => i.charAt(0)).toUpperCase() //Uppercase each letter
    string.split(' ').map(i => i.charAt(0)).toLowerCase() //lowercase each letter
    

    这仅适用于空格或 .split(' ') 方法中定义的任何内容

    即, .split(', ') .split('; ') 等 .

  • 1

    试试 -

    var text = '';
    var arr = "Java Script Object Notation".split(' ');
    for(i=0;i<arr.length;i++) {
        text += arr[i].substr(0,1)
    }    
    alert(text);
    

    演示 - http://jsfiddle.net/r2maQ/

  • 2

    要添加到优秀示例中,您可以在ES6中执行此操作

    const x = "Java Script Object Notation".split(' ').map(x => x[0]).join('');
    console.log(x);  // JSON
    

    这也有效,但请忽略它,我在这里有点坚果:-)

    const [j,s,o,n] = "Java Script Object Notation".split(' ').map(x => x[0]);
    console.log(`${j}${s}${o}${n}`);
    
  • 0

    备选1:

    你也可以使用这个正则表达式返回每个单词的第一个字母的数组

    /(?<=(\s|^))[a-z]/gi
    

    (?<=(\s|^)) 被称为 positive lookbehind ,它确保我们的搜索模式中的元素前面是 (\s|^) .


    所以,对于你的情况:

    // in case the input is lowercase & there's a word with apostrophe
    
    const toAbbr = (str) => {
      return str.match(/(?<=(\s|^))[a-z]/gi)
                .join('')
                .toUpperCase();
    };
    
    toAbbr("java script object notation"); //result JSON
    

    (顺便说一句,还有 negative lookbehindpositive lookaheadnegative lookahead ,如果你想了解更多)


    备选方案2:

    匹配所有单词并使用 replace() 方法将它们替换为每个单词的第一个字母并忽略空格(该方法不会改变原始字符串)

    // in case the input is lowercase & there's a word with apostrophe    
    
    const toAbbr = (str) => {
      return str.replace(/(\S+)(\s*)/gi, (match, p1, p2) => p1[0].toUpperCase());
    };
    
    toAbbr("java script object notation"); //result JSON
    
    // word = not space = \S+ = p1 (p1 is the first pattern)
    // space = \s* = p2 (p2 is the second pattern)
    
  • 1

    这个怎么样:

    var str = "", abbr = "";
    str = "Java Script Object Notation";
    str = str.split(' ');
    for (i = 0; i < str.length; i++) {
        abbr += str[i].substr(0,1);
    }
    alert(abbr);
    

    Working Example.

  • 0

    这应该做到这一点 .

    var s = "Java Script Object Notation",
        a = s.split(' '),
        l = a.length,
        i = 0,
        n = "";
    
    for (; i < l; ++i)
    {
        n += a[i].charAt(0);
    }
    
    console.log(n);
    
  • 15

    JavaScript的正则表达式版本与早于ECMAScript 6的Unicode不兼容,因此对于那些想要支持诸如“å”等字符的人来说,需要依赖非正则版本的脚本 .

    在版本6上的事件,您需要用\ u表示Unicode .

    更多细节:https://mathiasbynens.be/notes/es6-unicode-regex

  • 89

    使用reduce函数的另一个选项:

    var value = "Java Script Object Notation";
    
    var result = value.split(' ').reduce(function(previous, current){
        return {v : previous.v + current[0]};
    },{v:""});
    
    
    $("#output").text(result.v);
    
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <pre id="output"/>
    

相关问题