繁体   English   中英

在当前的现代Javascript中获取字符串的最后一个字符,允许使用代理对(两个代码单元)的星际字符,如表情符号

[英]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或其他最现代的东西。

我怎样才能访问最后一个角色,无论它是否是星界角色?

将字符串拆分为“除最后一个字符之外的所有字符”和“最终字符”也很好。

传播会将字符串解析为其代码点

[...'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); 

(不需要锚点,因为.*会贪婪。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM