JS 004: UTF-16 Code Points and u flag in RegExp

by Nico D

JavaScript

var version = 1;
var exampleNumber = 1;
const log = function(message) {
  if (version < exampleNumber) {
    version = exampleNumber;
    document.write("<br/>");
  }
  const title = 'EXAMPLE ' + exampleNumber + ': ';
  document.write(title + message + "<br/>");
};
//////////////////////
exampleNumber = 1;
var text = String.fromCodePoint(134071);
log(text + " -> " + text.length);
log(/^.$/.test(text)); // false
log(text.charAt(0)); // ""
log(text.charAt(1)); // ""
log(text.charCodeAt(0)); // 55362
log(text.charCodeAt(1)); // 57271
//////////////////////
exampleNumber = 2;
text += "a";
log(text + " -> " + text.length);
log(text.charCodeAt(0)); // 55362
log(text.charCodeAt(1)); // 57271
log(text.charCodeAt(2)); // 97
log(text.codePointAt(0)); // 134071
log(text.codePointAt(1)); // 57271
log(text.codePointAt(2)); // 97
//////////////////////
exampleNumber = 3;
function is32Bit(c) {
  return c.codePointAt(0) > 0xFFFF;
}
log(text.substr(0, 2) + " -> " + is32Bit(text.substr(0, 2)));
log(text.substr(2, 1) + " -> " + is32Bit(text.substr(1, 1)));
log(text.substr(0, 1) + " -> " + is32Bit(text.substr(0, 1)));
//////////////////////
exampleNumber = 4;
function codePointLength(text) {
    let result = text.match(/[\s\S]/gu);
    return result ? result.length : 0;
}
log(codePointLength("abc"));
log(codePointLength(String.fromCodePoint(134071) + "bc"));
log((String.fromCodePoint(134071) + "bc").length);