2011-11-26 15 views

Odpowiedz

69

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.

+0

Fajnie .. dziękuję! –

+0

@Armando: WIĘC jest trochę fajnie, jeśli dwie odpowiedzi zostaną wysłane w krótkim odstępie czasu. – hugomg

+0

nie działa poprawnie z umlautami w słowach –

15

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('') 
+0

Fajnie, dziękuję! –

+0

Myślę, że regex jest przesadą dla tej sytuacji. – JesseBuesking

+0

@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

0

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

Working Example.

0

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

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/

7

Najłatwiej bez regex

var abbr = "Java Script Object Notation".split(' ').map(function(item){return item[0]}).join(''); 
0

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

2

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

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

0

@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 
1

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}`); 
Powiązane problemy