2011-11-15 32 views
15

Ho un requisito in cui devo prendere la prima lettera di due parole da solo. Come ottengo la risposta dal WebService come John Cooper e devo prendere JC da questo.Dividere il primo carattere delle parole

Ho provato sbstr(0,2), ma questo richiede JO, c'è un modo che possiamo formare come sopra.

risposta

34

Con split e map:

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

Con regular expressions:

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

davvero amano in espressione regolare :) bel lavoro +1 – Marwan

+1

Questa espressione regolare presuppone che ogni parola inizi con una lettera maiuscola. Altre risposte hanno regex migliori. – Groady

+0

@Groady sbagliato. Questo regexp sostituisce solo le lettere minuscole con una stringa vuota. Il carattere di omissione '^' in questo caso significa 'not' (quindi il gruppo tra parentesi corrisponde a qualsiasi cosa tranne lettere maiuscole). – katspaugh

3

si possono trovare alcune buone funzioni javascript out-of-the-box sul 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); 
} 

Il trucco vi siete persi dal vostro tentativo è quello di prima split il nome di separare Nome e Cognome.

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

Fondamentalmente è dividere la stringa sullo spazio e prendere il primo carattere di ogni parola.

+1

['substr'] (https: //developer.mozilla.org/it/JavaScript/Riferimento/Global_Objects/String/substr) non è standard, meglio usare ['substring'] (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

Non lo sapevo - l'ho cambiato in 'substring()'. –

3

Beh, se ho ottenuto si scrive così semplicemente provare le seguenti

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

// questo è, se sei sicuro che è il nome è in 2 parole

Regards :)

11

di generalizzare la risposta regolare fornita da @katspaugh, funzionerà per tutte le stringhe con qualsiasi numero di parole, indipendentemente dal fatto che la prima lettera sia maiuscola o meno.

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

si tradurrà in JCW

ovviamente se si desidera mantenere il caso della prima lettera di ogni parola, è sufficiente rimuovere la toUpperCase()

LATERALE NOTA

con questo approccio, cose come John McCooper avranno come risultato JM non JMC

0

Ecco una soluzione espressione regolare che supporta le lettere accentate come un e non latini lingue come l'ebraico, e non si assume il nome è 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>

Problemi correlati