通常我只會用str[i]
之類的東西。如果str = "☀️"
?如何遍歷字符串中的字符我實際上可以看到嗎?
str[i]
失敗。 for (x of str) console.log(x)
也失敗。它打印出總共4個字符,即使字符串中只有2個表情符號。
什麼是迭代每個字符我可以看到一個字符串(和換行符,我猜),沒有別的?
理想的解決方案將返回一個2個字符的數組:2個表情符號,沒有別的。聲明的重複,以及我發現的一堆其他解決方案,不符合此標準。
通常我只會用str[i]
之類的東西。如果str = "☀️"
?如何遍歷字符串中的字符我實際上可以看到嗎?
str[i]
失敗。 for (x of str) console.log(x)
也失敗。它打印出總共4個字符,即使字符串中只有2個表情符號。
什麼是迭代每個字符我可以看到一個字符串(和換行符,我猜),沒有別的?
理想的解決方案將返回一個2個字符的數組:2個表情符號,沒有別的。聲明的重複,以及我發現的一堆其他解決方案,不符合此標準。
我最終發現,在這個瘋狂的JS庫的形式回答:
你需要爲星體角色製作自己的方法。
"foobar".match(/[\uD800-\uDBFF][\uDC00-\uDFFF]|./g);
// => ["f", "o", "o", "", "b", "a", "r"]
這在所有情況下都不起作用。考慮''foob☀️ar「.match(/ [\ uD800- \ uDBFF] [\ uDC00- \ uDFFF] | ./g);'。 – thedayturns
@thedayturns:是的,我只覆蓋了星體字符,這是JavaScript「錯誤地」將單個Unicode字符拆分爲兩個JS字符的地方。這個空白的字符串有一個VARIATION SELECTOR 16(U + FE0F),它是一個單獨的Unicode字符,但與前一個字符相結合;一個類似的問題將是所有組合角色,如組合ACUTE ACCENT(U + 0301)。所以要解決*那個問題,你需要一個完整的庫,它不在StackOverflow答案的範圍之內。 – Amadan
我想你應該檢查這個博客帖子:[鏈接](https://mathiasbynens.be/ notes/javascript-unicode) – msencer
[將JavaScript字符串拆分成代碼點數組? (考慮到「代理對」,但不是「字形集羣」)](http://stackoverflow.com/questions/21397316/split-javascript-string-into-array-of-codepoints-taking-into-account-surrogat ) –
你是說你想捕捉表情符號,或跳過它並找到下一個「正常」字符? – KevBot