获取当前现代 Javascript 中字符串的最后一个字符,允许使用代理对(两个代码单元)的 Astral 字符,例如 Emoji
Get last character of string in current modern Javascript, allowing for Astral characters such as Emoji that use surrogate pairs (two code units)
不在基本多语言平面 (BMP) 中的 Unicode 字符(代码点)可能由两个字符(代码单元)组成,称为代理项对。
'ab' 是两个代码单元和两个代码点。 (所以两个字符和两个字符。)
'a' 是三个代码单元和两个代码点。 (所以三个字符和两个字符。)
我的代码不需要使用旧版本的 JavaScript。 ES6 或任何最现代的东西。
我怎样才能访问最后一个角色,不管它是否是 Astral 角色?
将字符串拆分为"all but last character"和"final character"也可以。
传播会将字符串分解为其代码点
[...'a'].pop()
我从其他 SO 问题的答案中知道 Array.from()
和带有 /u
标志的正则表达式都可以正确处理非 BMP Unicode 字符,但我认为两者都不太可能成为最佳答案。
也许我错了,所以这里有两个解决方案:
Array.from()
let c = Array.from('a')[1];
console.log(c);
u
标志
let c ='a'.match(/.$/u)[0];
console.log(c);
第二种方法也可以扩展来回答我问题的第二部分:
let [,l,r] = 'abcd'.match(/(.*)(.)/u);
console.log(l);
console.log(r);
(不需要锚点,因为 .*
会很贪心。)
不在基本多语言平面 (BMP) 中的 Unicode 字符(代码点)可能由两个字符(代码单元)组成,称为代理项对。
'ab' 是两个代码单元和两个代码点。 (所以两个字符和两个字符。)
'a' 是三个代码单元和两个代码点。 (所以三个字符和两个字符。)
我的代码不需要使用旧版本的 JavaScript。 ES6 或任何最现代的东西。
我怎样才能访问最后一个角色,不管它是否是 Astral 角色?
将字符串拆分为"all but last character"和"final character"也可以。
传播会将字符串分解为其代码点
[...'a'].pop()
我从其他 SO 问题的答案中知道 Array.from()
和带有 /u
标志的正则表达式都可以正确处理非 BMP Unicode 字符,但我认为两者都不太可能成为最佳答案。
也许我错了,所以这里有两个解决方案:
Array.from()
let c = Array.from('a')[1];
console.log(c);
u
标志
let c ='a'.match(/.$/u)[0];
console.log(c);
第二种方法也可以扩展来回答我问题的第二部分:
let [,l,r] = 'abcd'.match(/(.*)(.)/u);
console.log(l);
console.log(r);
(不需要锚点,因为 .*
会很贪心。)