2014-07-02 26 views
8

(Bạn sẽ cần Firefox hoặc Safari để xem biểu tượng cảm xúc trong mã.)Làm cách nào để tách chuỗi chứa biểu tượng cảm xúc thành một mảng?

Tôi muốn lấy một chuỗi biểu tượng cảm xúc và làm điều gì đó với các ký tự riêng lẻ.

Trong JavaScript "⛔".length == 13"⛔" chiều dài là 1, còn lại là 2. Vì vậy, chúng ta không thể làm

s = string.split(""); 
c = []; 
c[0] = s[0]+s[1]; 

Đây là những gì tôi đã làm: emoji poster

+1

http://mathiasbynens.be/notes/javascript-unicode#iterating-over-symbols –

Trả lời

15

Chỉnh sửa: xem Orlin Georgiev's answer cho một giải pháp thích hợp trong thư viện: https://github.com/orling/grapheme-splitter


Nhờ this answer tôi đã thực hiện một chức năng mà phải mất một chuỗi và trả về một mảng các biểu tượng cảm xúc:

var emojiStringToArray = function (str) { 
    split = str.split(/([\uD800-\uDBFF][\uDC00-\uDFFF])/); 
    arr = []; 
    for (var i=0; i<split.length; i++) { 
    char = split[i] 
    if (char !== "") { 
     arr.push(char); 
    } 
    } 
    return arr; 
}; 

Vì vậy

emojiStringToArray("⛔") 
// => Array [ "", "", "", "⛔", "", "", "" ] 
+3

lưu ý rằng điều này sẽ không hoạt động đối với biểu tượng cảm xúc sử dụng người tham gia không có chiều rộng bằng 0 , bộ chọn biến thể hoặc biểu tượng cảm xúc keycap là chữ số + keycap + bộ chọn biến thể – Beau

+0

Chỉ cần sử dụng phương thức 'match'' str.match (/ ([\ uD800- \ uDBFF] [\ uDC00- \ uDFFF]) /); ' và nó sẽ trả lại biểu tượng cảm xúc –

+0

Tôi đã thử bạn hoạt động và nó hoạt động cho tôi, nhưng hãy nhìn vào điều này: emojiStringToArray ("⛔❤️❤️❤️❤️❤️❤️") // => Array ["", "", "", "⛔", "", "", "", "❤️❤️❤️❤️❤️❤️"] Bạn có biết cách giải quyết vấn đề này không ror? –

4

Javascript ES6 có một giải pháp !, cho một thực chia:

[..."⛔"] // ["", "", "", "⛔", "", "", ""] 

Yay? Ngoại trừ một thực tế là khi bạn chạy điều này thông qua transpiler của bạn, nó có thể không hoạt động (xem bình luận của @ brainkim). Nó chỉ hoạt động khi chạy trên trình duyệt tuân thủ ES6. May mắn là điều này bao gồm hầu hết các trình duyệt (Safari, Chrome, FF), nhưng nếu bạn đang tìm kiếm khả năng tương thích trình duyệt cao thì đây không phải là giải pháp cho bạn.

+1

Babel với các cài đặt es6 sẽ chuyển đổi điều này thành một cuộc gọi đến chức năng lặp của String để nó hoạt động trong một số transpilers. – brainkim

+0

@brainkim Tôi đã xác định rằng trong câu trả lời. Đó là lỗi của transpiler không đáp ứng tiêu chuẩn trên – Downgoat

+0

Ah, tôi nói đôi khi nó hoạt động. "khi bạn chạy điều này thông qua transpiler của bạn, nó sẽ không hoạt động" ngụ ý nó không bao giờ hoạt động. Nó phụ thuộc vào những biểu tượng cảm xúc cụ thể trong chuỗi, trình chuyển đổi bạn đang sử dụng, v.v. – brainkim

3

Thư viện grapheme-splitter mà không chỉ vậy, hoàn toàn tương thích ngay cả với các trình duyệt cũ và các công trình không chỉ với biểu tượng cảm xúc nhưng tất cả các loại nhân vật kỳ lạ: https://github.com/orling/grapheme-splitter Bạn có khả năng bỏ lỡ cạnh trường hợp trong bất kỳ nhà-brew dung dịch. Điều này thực sự dựa trên tiêu chuẩn Unicode UAX-29

+0

Điều này thật tuyệt vời! – Clay

Các vấn đề liên quan