有没有办法知道字符串中的字符数?

Is there a way to know the number of characters in a string?

此问题涉及多于一个 utf-16 字符的 unicode 字符

string.length returns 字符串中 unicode 16 个字符的数量。但是如果字符超过 1 个 unicode 16 个字符呢?是否可以从实际字符的 string.charAt 而不是 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));

您可以使用展开运算符:

var test = "";
var test2 = [...test];
console.log(test.length);
console.log(test2.length);

关于你的第二个问题,你需要修改正则表达式:

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));

另一种选择是使用带有 unicode 标志的 RegExp。

var test = "";
var length = test.match(/./ug).length;
console.log(length);

请注意,在某些情况下,这和使用展开运算符的答案可能会中断。

var test = "Z͑ͫ̓ͪ̂ͫ̽͏̴̙̤̞͉͚̯̞̠͍A̴̵̜̰͔ͫ͗͢L̠ͨͧͩ͘G̴̻͈͍͔̹̑͗̎̅͛́Ǫ̵̹̻̝̳͂̌̌͘";
var length = test.match(/./ug).length;
console.log(length);

要获取特定索引处的字符,您可以使用以下函数。

var test = "";

var charAt = charAt(test);

console.log(charAt);

function charAt(string, index) {
    if(!index)
        index = 0;

    return string.match(/./ug)[index];
}