101 votes

Obtenir la première lettre de chaque mot dans une chaîne de caractères, en JavaScript

Comment procéder pour rassembler la première lettre de chaque mot d'une chaîne, comme pour obtenir une abréviation ?

Entrée : "Java Script Object Notation"

Sortie : "JSON"

3voto

tomersss2 Points 69

Le défaut de @BotNet : Je pense l'avoir résolu après 3 jours atroces de tutoriels sur les expressions régulières :

\==> Je suis un animal

(utilisé pour attraper le m de I'm) à cause de la limite du mot, cela semble fonctionner pour moi de cette façon.

/(\s|^)([a-z])/gi

2voto

ipr101 Points 15337

Essayez -

var text = '';
var arr = "Java Script Object Notation".split(' ');
for(i=0;i<arr.length;i++) {
    text += arr[i].substr(0,1)
}    
alert(text);

Démo - http://jsfiddle.net/r2maQ/

2voto

Utilisation de map (extrait de la programmation fonctionnelle)

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

2voto

Fatma Nabilla Points 341

Alternative 1 :

vous pouvez aussi utiliser cette regex pour retourner un tableau de la première lettre de chaque mot

/(?<=(\s|^))[a-z]/gi

(?<=(\s|^)) s'appelle positive lookbehind qui s'assurent que l'élément de notre modèle de recherche est précédé de (\s|^) .


donc, pour votre cas :

// in case the input is lowercase & there's a word with apostrophe

const toAbbr = (str) => {
  return str.match(/(?<=(\s|^))[a-z]/gi)
            .join('')
            .toUpperCase();
};

toAbbr("java script object notation"); //result JSON

(au fait, il y a aussi negative lookbehind , positive lookahead , negative lookahead si vous voulez en savoir plus)


Alternative 2 :

associez tous les mots et utilisez replace() pour les remplacer par la première lettre de chaque mot et ignorer l'espace (la méthode ne modifiera pas votre chaîne d'origine).

// in case the input is lowercase & there's 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)

2voto

Wiktor Stribiżew Points 100073

Obtenir la première lettre de n'importe quel mot Unicode en JavaScript est désormais facile avec la norme ECMAScript 2018 :

/(?<!\p{L}\p{M}*)\p{L}/gu

Cette regex trouve n'importe quelle lettre Unicode (voir la dernière section \p{L} ) qui n'est pas précédée d'une autre lettre qui peut éventuellement comporter des symboles diacritiques (voir l'annexe 1 de la Charte des droits fondamentaux de l'Union européenne). (?<!\p{L}\p{M}*) un regard négatif derrière où \p{M}* correspond à 0 ou plusieurs caractères diacritiques). Notez que u est obligatoire ici pour les classes de propriétés Unicode (telles que \p{L} ) pour fonctionner correctement.

Pour émuler un système entièrement compatible avec l'Unicode. \b vous devrez ajouter un modèle de correspondance des chiffres et une ponctuation de connexion :

/(?<!\p{L}\p{M}*|[\p{N}\p{Pc}])\p{L}/gu

Il fonctionne dans Chrome, Firefox (depuis le 30 juin 2020), Node.js, et la majorité des autres environnements (voir la section matrice de compatibilité ici ), pour tout langage naturel y compris l'arabe.

Test rapide :

const regex = /(?<!\p{L}\p{M}*)\p{L}/gu;
const string = "erard ywiski";
// Extracting
console.log(string.match(regex));                        // => [ "", "" ]
// Extracting and concatenating into string
console.log(string.match(regex).join(""))                // => 
// Removing
console.log(string.replace(regex, ""))                   // => erard ywiski
// Enclosing (wrapping) with a tag
console.log(string.replace(regex, "<span>$&</span>"))    // => <span></span>erard <span></span>ywiski

console.log("_ukasz 1ukowski".match(/(?<!\p{L}\p{M}*|[\p{N}\p{Pc}])\p{L}/gu)); // => null

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X