2011-11-26 33 views

Respuesta

69

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.

+0

Agradable ... ¡gracias! –

+0

@Armando: SO es un poco raro si se publican dos respuestas en rápida sucesión. – hugomg

+0

no funciona con diéresis en las palabras –

15

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('') 
+0

¡Agradable, gracias! –

+0

Creo que una expresión regular es excesiva para esta situación. – JesseBuesking

+0

@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

0

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

Working Example.

0

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

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/

7

La manera más fácil y sin expresiones regulares

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

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

2

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(''); 
} 
0

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"/>

0

@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 
1

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}`); 
Cuestiones relacionadas