Advertisement
Guest User

Untitled

a guest
Aug 31st, 2016
55
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.98 KB | None | 0 0
  1. var my_string = "🐍"; // 蛇の絵文字
  2. var str_length = my_string.length;
  3. console.log(str_length); // 2
  4.  
  5. var my_string = "🐍";
  6. var str_length = my_string.length - (my_string.split(/[uD800-uDBFF][uDC00-uDFFF]/g).length - 1);
  7. print(str_length); // 1
  8.  
  9. var my_string = "🐍";
  10. var str_length = my_string.length - (my_string.match(/[uD800-uDBFF][uDC00-uDFFF]/g)||[]).length;
  11. print(str_length); // 1
  12.  
  13. str_length = [...my_string].length
  14.  
  15. var GraphemeBreaker = require('grapheme-breaker');
  16.  
  17. // 日本の国旗
  18. // http://www.taishukan.co.jp/kokugo/webkoku/series003_11.html
  19. var c = String.fromCodePoint(0x1F1EF, 0x1F1F5);
  20. console.log(c);
  21.  
  22. // バリアント
  23. // http://unicode.org/Public/UNIDATA/StandardizedVariants.html
  24. var c2 = String.fromCodePoint(0x267F, 0xFE0F);
  25. console.log(c2);
  26.  
  27. // Unicode 8.0 で対応予定
  28. // VI 型の肌色の少年
  29. // http://www.unicode.org/reports/tr51/tr51-2.html#Diversity
  30. // var c3 = String.fromCodePoint(0x1F466, 0x1F3FF);
  31. // console.log(c3);
  32.  
  33. var str = c + c2;
  34. // 拡張書記素クラスターの数
  35. console.log(GraphemeBreaker.countBreaks(str));
  36.  
  37. var length = str.length;
  38. var previous = 0;
  39. var current = 0;
  40.  
  41. while (current < length) {
  42. previous = current;
  43. current = GraphemeBreaker.nextBreak(str, previous);
  44. console.log(str.slice(previous, current));
  45. }
  46.  
  47. var c = "u267F" + "uFE0F".repeat(10000);
  48. console.log(1 === GraphemeBreaker.countBreaks(c));
  49.  
  50. var c = String.fromCodePoint(0x1F1EF, 0x1F1F5);
  51. var c2 = String.fromCodePoint(0x267F, 0xFE0F);
  52. var str = c + c2;
  53.  
  54. console.log(2 === graphemeLength(str, ['ja-JP']));
  55.  
  56. function graphemeLength(str, locales)
  57. {
  58. var it = new Intl.v8BreakIterator(locales, {type: 'character'});
  59. it.adoptText(str);
  60.  
  61. var length = 0;
  62. var previous = 0;
  63. var current = it.first();
  64.  
  65. while (current !== -1) {
  66.  
  67. current = it.next();
  68.  
  69. if (current === -1) {
  70. break;
  71. }
  72.  
  73. previous = current;
  74. ++length;
  75. }
  76.  
  77. return length;
  78. }
  79.  
  80. Array.from("𠮷野家").length
  81. // => 3
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement