Get first letter of each word in a string, in JavaScript

后端 未结 17 1630
后悔当初
后悔当初 2020-12-05 04:00

How would you go around to collect the first letter of each word in a string, as in to receive an abbreviation?

Input: "Java Script Object

相关标签:
17条回答
  • 2020-12-05 04:23

    To add to the great examples, you could do it like this in ES6

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

    and this works too but please ignore it, I went a bit nuts here :-)

    const [j,s,o,n] = "Java Script Object Notation".split(' ').map(x => x[0]);
    console.log(`${j}${s}${o}${n}`);
    
    0 讨论(0)
  • Getting first letter of any Unicode word in JavaScript is now easy with the ECMAScript 2018 standard:

    /(?<!\p{L}\p{M}*)\p{L}/gu
    

    This regex finds any Unicode letter (see the last \p{L}) that is not preceded with any other letter that can optionally have diacritic symbols (see the (?<!\p{L}\p{M}*) negative lookbehind where \p{M}* matches 0 or more diacritic chars). Note that u flag is compulsory here for the Unicode property classes (like \p{L}) to work correctly.

    To emulate a fully Unicode-aware \b, you'd need to add a digit matching pattern and connector punctuation:

    /(?<!\p{L}\p{M}*|[\p{N}\p{Pc}])\p{L}/gu
    

    It works in Chrome, Firefox (since June 30, 2020), Node.js, and the majority of other environments (see the compatibility matrix here), for any natural language including Arabic.

    Quick test:

    const regex = /(?<!\p{L}\p{M}*)\p{L}/gu;
    const string = "Żerard Łyżwiński";
    // Extracting
    console.log(string.match(regex));                        // => [ "Ż", "Ł" ]
    // Extracting and concatenating into string
    console.log(string.match(regex).join(""))                // => ŻŁ
    // Removing
    console.log(string.replace(regex, ""))                   // => erard yżwiński
    // Enclosing (wrapping) with a tag
    console.log(string.replace(regex, "<span>$&</span>"))    // => <span>Ż</span>erard <span>Ł</span>yżwiński
    
    console.log("_Łukasz 1Żukowski".match(/(?<!\p{L}\p{M}*|[\p{N}\p{Pc}])\p{L}/gu)); // => null

    0 讨论(0)
  • 2020-12-05 04:24

    This should do it.

    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);
    
    0 讨论(0)
  • 2020-12-05 04:25

    ES6 reduce way:

    const initials = inputStr.split(' ').reduce((result, currentWord) => 
        result + currentWord.charAt(0).toUpperCase(), '');
    alert(initials);
    
    0 讨论(0)
  • 2020-12-05 04:27

    Using map (from functional programming)

    '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('');
    }
    
    0 讨论(0)
  • 2020-12-05 04:28

    Easiest way without regex

    var abbr = "Java Script Object Notation".split(' ').map(function(item){return item[0]}).join('');
    
    0 讨论(0)
提交回复
热议问题