2011-11-26 82 views

Trả lời

69

Tôi nghĩ điều bạn đang tìm kiếm là từ viết tắt của chuỗi được cung cấp.

var str  = "Java Script Object Notation"; 
var matches = str.match(/\b(\w)/g);    // ['J','S','O','N'] 
var acronym = matches.join('');     // JSON 

Lưu ý: này sẽ thất bại cho gạch nối từ/apostrophe'd Help-me I'm Dieing sẽ HmImD. Nếu đó không phải là những gì bạn muốn, việc chia tách trên không gian, hãy lấy chữ cái đầu tiên là cách tiếp cận có thể là những gì bạn muốn.

+0

Nice .. cảm ơn bạn! –

+0

@Armando: SO là kinda funcky nếu hai câu trả lời được đăng trong kế nhanh chóng. – hugomg

+0

không hoàn toàn hoạt động với các âm sắc theo từ –

15

Tôi nghĩ bạn có thể làm điều này với

'Aa Bb'.match(/\b\w/g).join('') 

Giải thích: Lấy tất cả /g các ký tự chữ và \w xảy ra sau khi một nhân vật phi tự chữ và số (ví dụ: sau một ranh giới từ \b), đặt chúng trên một mảng với .match() và tham gia tất cả mọi thứ trong một chuỗi đơn .join('')


Tùy thuộc vào wha t bạn muốn làm bạn cũng có thể xem xét việc chỉ chọn tất cả các ký tự chữ hoa:

'JavaScript Object Notation'.match(/[A-Z]/g).join('') 
+0

Rất tốt, cảm ơn bạn! –

+0

Tôi nghĩ rằng một regex là quá mức cần thiết cho tình huống này. – JesseBuesking

+0

@ JesseB: Tôi không biết, giải pháp thay thế với phân chia là loại dài dòng và phải lo lắng về nhiều ký tự không gian theo trình tự và các dấu tách khác như dấu chấm hoặc dấu phẩy. – hugomg

0

Làm thế nào về điều này:

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

này nên làm điều đó.

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

Thử -

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

Cách dễ nhất mà không regex

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

Các phiên bản biểu thức chính quy cho JavaScript không tương thích với Unicode trên lớn hơn ECMAScript 6 , vì vậy đối với những người muốn hỗ trợ các ký tự như "å" sẽ cần dựa vào các phiên bản tập lệnh không phải regex.

Sự kiện khi trên phiên bản 6, bạn cần chỉ định Unicode với \ u.

Thông tin chi tiết: https://mathiasbynens.be/notes/es6-unicode-regex

2

Sử dụng map (từ lập trình chức năng)

'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

Tuy nhiên, một tùy chọn sử dụng reduce chức năng:

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 lỗ hổng: tôi nghĩ rằng tôi đã giải quyết nó sau khi đớn 3 ngày kể từ khi biểu hướng dẫn thường xuyên:

==> Tôi là một một con vật

(được sử dụng để bắt m của tôi) vì ranh giới từ, nó dường như làm việc cho tôi theo cách đó.

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

Để thêm vào những ví dụ tuyệt vời, bạn có thể làm điều đó như thế này trong ES6

const x = "Java Script Object Notation".split(' ').map(x => x[0]).join(''); 
console.log(x); // JSON 

và các công trình này quá nhưng xin vui lòng bỏ qua nó, tôi đã đi một hạt chút ở đây :-)

const [j,s,o,n] = "Java Script Object Notation".split(' ').map(x => x[0]); 
console.log(`${j}${s}${o}${n}`); 
Các vấn đề liên quan