2011-11-15 19 views
15

Tengo un requisito en el que tengo que tomar solo la primera letra de dos palabras. Me gusta obtener la respuesta del Servicio web como John Cooper y tengo que tomar JC de esto.División del primer carácter de las palabras

Probé sbstr(0,2), pero esto requiere JO, ¿hay alguna forma en que podamos formarnos como se indica anteriormente?

Respuesta

34

Con split y map:

'John Cooper'.split(' ').map(function (s) { return s.charAt(0); }).join(''); 

Con regular expressions:

'John Cooper'.replace(/[^A-Z]/g, ''); 
+3

realmente lo aman en expresión regular :) buen trabajo +1 – Marwan

+1

Esta expresión regular asume que cada palabra comienza con una letra mayúscula. Otras respuestas tienen mejores expresiones regulares. – Groady

+0

@Groady mal. Esta expresión regular solo reemplaza cualquier letra minúscula con una cadena vacía. El carácter de intercalación '^' en este caso significa 'no' (por lo que el grupo entre paréntesis coincide con cualquier cosa que no sean letras mayúsculas). – katspaugh

3

se pueden encontrar algunas buenas funciones javascript fuera de la caja en la web:

function getInitials(x) 
{ 
     //(x is the name, e.g. John Cooper) 

     //create a new variable 'seperateWords' 
     //which uses the split function (by removing spaces) 
     //to create an array of the words 
     var seperateWords = x.split(" "); 

     //also create a new empty variable called acronym 
     //which will eventually store our acronym 
     var acronym = ""; 

     //then run a for loop which runs once for every 
     //element in the array 'seperateWords'. 
     //The number of elements in this array are ascertained 
     //using the 'seperateWords.length' variable 
     for (var i = 0; i < seperateWords.length; i++){ 

      //Eacy letter is added to the acronym 
      //by using the substr command to grab 
      //the first letter of each word 
      acronym = (acronym + seperateWords[i].substr(0,1)); 
     } 

     //At the end, set the value of the field 
     //to the (uppercase) acronym variable 
     // you can store them in any var or any HTML element 
     document.register.username2.value = toUpperCase(acronym); 
} 

El truco se ha perdido de su intento es a primera split el nombre para separar nombre y apellido.

[Source]

2
var name = "John Cooper"; 
var initials = ""; 
var wordArray = name.split(" "); 
for(var i=0;i<wordArray.length;i++) 
{ 
    initials += wordArray[i].substring(0,1); 
} 
document.write(initials); 

Básicamente dividir la cadena en el espacio y dar el primer carácter de cada palabra.

+1

['substr'] (https: //developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String/substr) no es estándar, mejor uso ['subscring'] (https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String/substring) o ['slice'] (https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String/slice). – katspaugh

+0

No sabía eso - lo he cambiado a 'substring()'. –

3

Bueno, si tengo que escribir lo que simplemente tratar los siguientes

var words = 'John Cooper'.split(' '); 
var shortcut = words[0][0] + words[1][0]; 
alert(shortcut); 

// eso es si es seguro que el nombre está en 2 palabras

Saludos :)

11

generalizar la la respuesta de expresiones regulares dada por @katspaugh, esto funcionará para todas las cadenas con cualquier cantidad de palabras, ya sea que la primera letra esté en mayúscula o no.

'John Cooper workz'.replace(/\W*(\w)\w*/g, '$1').toUpperCase() 

dará lugar a JCW

obviamente, si desea mantener el caso de la primera letra de cada palabra, basta con retirar el toUpperCase()

Nota al margen

con este enfoque, cosas como John McCooper darán como resultado JM no JMC

0

he aquí una solución expresión regular que es compatible con las letras acentuadas como A y no latinos lenguas como el hebreo, y no asume el nombre es Camel-Caso:

var name = 'ḟoo Ḃar'; 
 
var initials = name.replace(/\s*(\S)\S*/g, '$1').toUpperCase(); 
 
document.getElementById('output').innerHTML = initials;
<div id="output"></div>

Cuestiones relacionadas