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