Bạn sẽ làm cách nào để thu thập chữ cái đầu tiên của mỗi từ trong một chuỗi, như để nhận chữ viết tắt?Nhận chữ cái đầu tiên của mỗi từ trong một chuỗi, trong Javascript
String: "Java Script Object Notation"
Wanted result: "JSON"
Bạn sẽ làm cách nào để thu thập chữ cái đầu tiên của mỗi từ trong một chuỗi, như để nhận chữ viết tắt?Nhận chữ cái đầu tiên của mỗi từ trong một chuỗi, trong Javascript
String: "Java Script Object Notation"
Wanted result: "JSON"
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.
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('')
Rất tốt, cảm ơn bạn! –
Tôi nghĩ rằng một regex là quá mức cần thiết cho tình huống này. – JesseBuesking
@ 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
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);
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);
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/
Cách dễ nhất mà không regex
var abbr = "Java Script Object Notation".split(' ').map(function(item){return item[0]}).join('');
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
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('');
}
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"/>
@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
Để 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}`);
Nice .. cảm ơn bạn! –
@Armando: SO là kinda funcky nếu hai câu trả lời được đăng trong kế nhanh chóng. – hugomg
không hoàn toàn hoạt động với các âm sắc theo từ –