¿Cómo iría para recoger la primera letra de cada palabra en una cadena, como para recibir una abreviatura?Obtenga la primera letra de cada palabra en una cadena, en Javascript
String: "Java Script Object Notation"
Wanted result: "JSON"
¿Cómo iría para recoger la primera letra de cada palabra en una cadena, como para recibir una abreviatura?Obtenga la primera letra de cada palabra en una cadena, en Javascript
String: "Java Script Object Notation"
Wanted result: "JSON"
Creo que lo que estás buscando es el acrónimo de una cadena suministrada.
var str = "Java Script Object Notation";
var matches = str.match(/\b(\w)/g); // ['J','S','O','N']
var acronym = matches.join(''); // JSON
Nota: esto va a fallar por las palabras con guiones/apostrophe'd Help-me I'm Dieing
habrá HmImD
. Si eso no es lo que desea, el se divide en espacio, tome la primera letra puede ser el enfoque que desee.
Creo que se puede hacer esto con
'Aa Bb'.match(/\b\w/g).join('')
Explicación: obtener toda /g
los caracteres alfanuméricos \w
que se producen después de un carácter no alfanumérico (es decir: después de un límite de palabra \b
), se los puso una matriz con .match()
y unirse a todo en una sola cadena .join('')
Dependiendo de la AMS t que quiere hacer también se puede considerar simplemente seleccionando todos los caracteres en mayúsculas:
'JavaScript Object Notation'.match(/[A-Z]/g).join('')
¡Agradable, gracias! –
Creo que una expresión regular es excesiva para esta situación. – JesseBuesking
@JesseB: No lo sé, la solución alternativa con split es algo verbosa y tiene que preocuparse por los espacios múltiples caracteres en secuencia y otros separadores como puntos o comas. – hugomg
¿Qué tal esto:
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);
Esto debe hacerlo.
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);
Try -
var text = '';
var arr = "Java Script Object Notation".split(' ');
for(i=0;i<arr.length;i++) {
text += arr[i].substr(0,1)
}
alert(text);
Demo - http://jsfiddle.net/r2maQ/
La manera más fácil y sin expresiones regulares
var abbr = "Java Script Object Notation".split(' ').map(function(item){return item[0]}).join('');
Las versiones de expresiones regulares de JavaScript no es compatible con Unicode en mayores de ECMAScript 6 , por lo que para aquellos que quieran apoyar personajes como "å" necesitarán confiar en versiones no regex de scripts.
Evento cuando está en la versión 6, necesita indicar Unicode con \ u.
Más detalles: https://mathiasbynens.be/notes/es6-unicode-regex
Uso map
(de programación funcional)
'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('');
}
Sin embargo, otra opción utilizando reduce
función:
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"/>
@BotNet defecto: creo que lo resolvió después de 3 días de insoportable tutoriales expresiones regulares:
==> No soy un animal
(utilizado para la captura de m estoy) a causa de la límite de palabras, parece funcionar para mí de esa manera.
/(\s|^)([a-z])/gi
Para agregar a los grandes ejemplos, que podrían hacerlo de esta manera en ES6
const x = "Java Script Object Notation".split(' ').map(x => x[0]).join('');
console.log(x); // JSON
y esto funciona también pero lo tenga en cuenta que fue un poco la olla aquí :-)
const [j,s,o,n] = "Java Script Object Notation".split(' ').map(x => x[0]);
console.log(`${j}${s}${o}${n}`);
Agradable ... ¡gracias! –
@Armando: SO es un poco raro si se publican dos respuestas en rápida sucesión. – hugomg
no funciona con diéresis en las palabras –