W jaki sposób chciałbyś zebrać pierwszą literę każdego słowa w ciągu znaków, aby otrzymać skrót?Zdobądź pierwszą literę każdego słowa w ciągu znaków, w JavaScript
String: "Java Script Object Notation"
Wanted result: "JSON"
W jaki sposób chciałbyś zebrać pierwszą literę każdego słowa w ciągu znaków, aby otrzymać skrót?Zdobądź pierwszą literę każdego słowa w ciągu znaków, w JavaScript
String: "Java Script Object Notation"
Wanted result: "JSON"
Myślę, że to, czego szukasz, jest akronimem dostarczonego ciągu.
var str = "Java Script Object Notation";
var matches = str.match(/\b(\w)/g); // ['J','S','O','N']
var acronym = matches.join(''); // JSON
Uwaga: to zawiedzie na dzielenie wyrazów/apostrophe'd słowy Help-me I'm Dieing
będzie HmImD
. Jeśli to nie jest to, czego chcesz, podzielić na przestrzeni, chwycić pierwszą literę podejście może być, co chcesz.
myślę, że można to zrobić z
'Aa Bb'.match(/\b\w/g).join('')
Wyjaśnienie: uzyskać wszelkie /g
znaki alfanumeryczne \w
które występują po charakterze non-alfanumerycznym (tj: po granicy słowo \b
), umieścić je na tablica z .match()
i dołącz wszystko w jednym ciągiem .join('')
zależności od wha t chcesz zrobić, można również rozważyć po prostu wybierając wszystkie duże litery:
'JavaScript Object Notation'.match(/[A-Z]/g).join('')
Fajnie, dziękuję! –
Myślę, że regex jest przesadą dla tej sytuacji. – JesseBuesking
@JesseB: Nie wiem, alternatywne rozwiązanie z splitem jest dość gadatliwe i musi martwić się wieloma znakami spacji w sekwencji i innymi separatorami, jak kropki lub przecinki. – hugomg
Jak ten temat:
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);
To powinno wystarczyć.
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);
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/
Najłatwiej bez regex
var abbr = "Java Script Object Notation".split(' ').map(function(item){return item[0]}).join('');
regularnej wersji ekspresyjnych dla JavaScript nie jest kompatybilny z Unicode na starsze niż ECMAScript 6 , więc ci, którzy chcą wspierać postaci takie jak "å" będą potrzebować polegać na wersjach skryptów innych niż regex.
Zdarzenie, gdy w wersji 6, musisz wskazać kod Unicode, używając \ u.
Więcej szczegółów: https://mathiasbynens.be/notes/es6-unicode-regex
Korzystanie map
(od programowania funkcyjnego)
'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('');
}
Jeszcze inna opcja korzystania reduce
funkcję:
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"/>
@BotNet wada: myślę rozwiązać go po rozdzierający 3 dni wyrażeń regularnych ćwiczeń:
==> jestem zwierzęciem
(używany do połowu M jestem) z powodu granica słowa, wydaje mi się, że działa to w ten sposób.
/(\s|^)([a-z])/gi
dodać do interesujących przykładów, można zrobić to w ten sposób w ES6
const x = "Java Script Object Notation".split(' ').map(x => x[0]).join('');
console.log(x); // JSON
i działa to zbyt ale zignoruj go, poszedłem trochę orzechów tutaj :-)
const [j,s,o,n] = "Java Script Object Notation".split(' ').map(x => x[0]);
console.log(`${j}${s}${o}${n}`);
Fajnie .. dziękuję! –
@Armando: WIĘC jest trochę fajnie, jeśli dwie odpowiedzi zostaną wysłane w krótkim odstępie czasu. – hugomg
nie działa poprawnie z umlautami w słowach –