Esta pregunta se refiere a caracteres Unicode que son más de un carácter utf-16
string.length devuelve el número de caracteres Unicode 16 en la cadena. Pero, ¿qué pasa con el caso de caracteres que tienen más de 1 carácter Unicode 16? ¿Es posible obtener el número real de caracteres, así como los valores "verdaderos" de string.charAt del carácter real, y no las piezas utf-16?
var test = "🀄"; console.log(test.length) var regex = /[\u{1F000}-\u{1F0FF}]/g; var regex2 = /🀄/g console.log('test: ' + regex.test(test)); console.log('test2: ' + regex2.test(test));Otra opción es usar RegExp con el indicador Unicode.
var test = "🀄"; var length = test.match(/./ug).length; console.log(length);Tenga en cuenta que esto y la respuesta que usa el operador de propagación pueden fallar en ciertas circunstancias.
var test = "Z͑ͫ̓ͪ̂ͫ̽͏̴̙̤̞͉͚̯̞̠͍A̴̵̜̰͔ͫ͗͢L̠ͨͧͩ͘G̴̻͈͍͔̹̑͗̎̅͛́Ǫ̵̹̻̝̳͂̌̌͘"; var length = test.match(/./ug).length; console.log(length);Para obtener el carácter en un índice específico, puede usar la siguiente función.
var test = "🀄👼👺💩"; var charAt = charAt(test); console.log(charAt); function charAt(string, index) { if(!index) index = 0; return string.match(/./ug)[index]; }puedes usar el operador de propagación:
var test = "🀄"; var test2 = [...test]; console.log(test.length); console.log(test2.length);sobre su segunda pregunta, necesita modificar regexp:
var test = "🀄"; console.log(test.length) var regex = /[\u{1F000}-\u{1F0FF}]/ug; var regex2 = /🀄/g console.log('test: ' + regex.test(test)); console.log('test2: ' + regex2.test(test));