Как бы вы пошли, чтобы собрать первую букву каждого слова в строке, чтобы получить аббревиатуру?
String: "Java Script Object Notation"
Wanted result: "JSON"
Как бы вы пошли, чтобы собрать первую букву каждого слова в строке, чтобы получить аббревиатуру?
String: "Java Script Object Notation"
Wanted result: "JSON"
Я думаю, что вы ищете, это аббревиатура поставляемой строки.
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)
Я думаю, вы можете сделать это с помощью
'Aa Bb'.match(/\b\w/g).join('')
Объяснение: Получите все /g
буквенно-цифровые символы \w
, которые появляются после не-буквенно-цифрового символа (например: после границы слова \b
), поместите их в массив с .match()
и соединить все в одну строку .join('')
В зависимости от того, что вы хотите сделать, вы также можете просто выбрать все символы верхнего регистра:
'JavaScript Object Notation'.match(/[A-Z]/g).join('')
Самый простой способ без регулярного выражения
var abbr = "Java Script Object Notation".split(' ').map(function(item){return item[0]}).join('');
Ошибка @BotNet: я думаю, я решил это после мучительных 3-х дней регулярных выражений:
== > Я животное
(используется для того, чтобы поймать m of I'm) из-за границы слова, похоже, это работает для меня таким образом.
/(\s|^)([a-z])/gi
Попробуйте -
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/
Использование 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('');
}
Чтобы добавить к большим примерам, вы можете сделать это в 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}`);
Это сделано очень просто с 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('; ')
и т.д.
вы также можете использовать это регулярное выражение для возврата массива первой буквы каждого слова
/(?<=(\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
, если вы хотите узнать больше)
сопоставьте все слова и используйте метод 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)
Как насчет этого:
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);
Это должно сделать это.
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);
Версии регулярных выражений для JavaScript несовместимы с Unicode более старыми, чем ECMAScript 6, поэтому для тех, кто хочет поддерживать символы, такие как "å", нужно будет полагаться на не-регулярные версии скриптов.
Событие, когда в версии 6 вам нужно указать Unicode с \u.
Еще один вариант с использованием 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"/>
Это похоже на другие, но (ИМХО) немного легче читать:
const getAcronym = title =>
title.split(' ')
.map(word => word[0])
.join('');