Подтвердить что ты не робот

Получить первую букву каждого слова в строке, в Javascript

Как бы вы пошли, чтобы собрать первую букву каждого слова в строке, чтобы получить аббревиатуру?

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

Ответ 1

Я думаю, что вы ищете, это аббревиатура поставляемой строки.

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)

Ответ 2

Я думаю, вы можете сделать это с помощью

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

Объяснение: Получите все /g буквенно-цифровые символы \w, которые появляются после не-буквенно-цифрового символа (например: после границы слова \b), поместите их в массив с .match() и соединить все в одну строку .join('')


В зависимости от того, что вы хотите сделать, вы также можете просто выбрать все символы верхнего регистра:

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

Ответ 3

Самый простой способ без регулярного выражения

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

Ответ 4

Ошибка @BotNet: я думаю, я решил это после мучительных 3-х дней регулярных выражений:

== > Я животное

(используется для того, чтобы поймать m of I'm) из-за границы слова, похоже, это работает для меня таким образом.

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

Ответ 5

Попробуйте -

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/

Ответ 6

Использование 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('');
}

Ответ 7

Чтобы добавить к большим примерам, вы можете сделать это в 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}`);

Ответ 8

Это сделано очень просто с 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('; ') и т.д.

Ответ 9

Альтернатива 1:

вы также можете использовать это регулярное выражение для возврата массива первой буквы каждого слова

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

(?<=(\s|^)) называется positive lookbehind, что гарантирует, что элементу в нашем шаблоне поиска предшествует (\s|^).


Итак, для вашего случая:

// in case the input is lowercase & there a word with apostrophe

const toAbbr = (str) => {
  return str.match(/(?<=(\s|^))[a-z]/gi)
            .join('')
            .toUpperCase();
};

toAbbr("java script object notation"); //result JSON

(кстати, есть также negative lookbehind, positive lookahead, negative lookahead, если вы хотите узнать больше)


Альтернатива 2:

сопоставьте все слова и используйте метод replace(), чтобы заменить их первой буквой каждого слова и пропустите пробел (метод не изменяет исходную строку)

// in case the input is lowercase & there 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)

Ответ 10

Как насчет этого:

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);

Рабочий пример.

Ответ 11

Это должно сделать это.

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);

Ответ 12

Версии регулярных выражений для JavaScript несовместимы с Unicode более старыми, чем ECMAScript 6, поэтому для тех, кто хочет поддерживать символы, такие как "å", нужно будет полагаться на не-регулярные версии скриптов.

Событие, когда в версии 6 вам нужно указать Unicode с \u.

Подробнее: https://mathiasbynens.be/notes/es6-unicode-regex

Ответ 13

Еще один вариант с использованием 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"/>

Ответ 14

Это похоже на другие, но (ИМХО) немного легче читать:

const getAcronym = title =>
  title.split(' ')
    .map(word => word[0])
    .join('');