ECMAScript6面对大于0xFFFF的Unicode字符如何正确返回长度

一、match()

1.定义

match()方法用于检索字符串内指定(字符串或正则)的值,返回指定值的数组,若找不到,返回null。

2.语法

str.match(searchvalue)
str.match(regexp)

3.示例

let str = 'abc-def-zxc';
console.log(str.match('-')); // ["-", index: 3, input: "abc-def-zxc"]
console.log(str.match(/[a-z]{3}/g)); // ["abc", "def", "zxc"]

4.注意

match()常常与正则标识g配合使用,若没有g则只匹配一次。

let str = 'abc-def-zxc';
console.log(str.match(/[a-z]{3}/)); // ["abc", index: 0, input: "abc-def-zxc"]
console.log(str.match(/[a-z]{3}/g)); // ["abc", "def", "zxc"]

二、使用match()方法判断大于0xFFFF的Unicode字符长度

正则标识u能识别码点大于0xFFFF的Unicode字符。

console.log(/^.$/.test('??')); // false 正常情况下??被当作两个字符
console.log(/^.$/u.test('??')); // true

利用u这个特性可以用来验证判断大于0xFFFF的Unicode字符长度。

function getRealLength (str) {
    let ret = str.match(/./gu);
    return ret ? ret.length : 0;
}
let str = '??????';
console.log(str.length); // 6
console.log(getRealLength(str)); // 3

原文地址:https://www.cnblogs.com/mazey/p/8436420.html

时间: 2024-10-08 02:27:27

ECMAScript6面对大于0xFFFF的Unicode字符如何正确返回长度的相关文章

JAVA如何正确处理Unicode字符

最近在开发输入法程序时遇到一个小问题,就是删除一个emoji时,不能一次删干净,需要执行两次操作才可以.Intuitively,这肯定是java操作unicode字符的问题,于是找了JAVA官方文档参考一下,解决了这个问题,这里做下简单总结.原文在这里,有兴趣自己看. http://www.oracle.com/technetwork/articles/java/supplementary-142654.html 注:文章中提到的"JAVA字节"均指JAVA平台的16位字节,请不要和C

Unicode字符集和多字节字符集关系(转载)

Unicode字符集和多字节字符集关系 原文链接:http://blog.csdn.net/stephen1315/article/details/ 在计算机中字符通常并不是保存为图像,每个字符都是使用一个编码来表示的,而每个字符究竟使用哪个编码代表,要取决于使用哪个字符集(charset).      在最初的时候,Internet上只有一种字符集——ANSI的ASCII字符集,它使用7 bits来表示一个字符,总共表示128个字符,其中包括了英文字母.数字.标点符号等常用字符.之后,又进行扩

Unicode字符列表(超完整)

Unicode字符列表(超完整)Unicode, 字符, 列表代码 显示 描述U+0020  空格 U+0021 ! 叹号 U+0022 " 双引号 U+0023 # 井号 U+0024 $ 价钱/货币符号 U+0025 % 百分比符号 U+0026 & 英文“and”的简写符号 U+0027 ' 引号 U+0028 ( 开 圆括号 U+0029 ) 关 圆括号 U+002A * 星号 U+002B + 加号 U+002C , 逗号 U+002D - 连字号/减号 U+002E . 句号

c程序实现unicode字符转utf-8字符

下面是一个unicode字符转换为utf-8的c程序实现: /* * ===================================================================================== * * Filename: utou.c * * Description: * * Version: 1.0 * Created: 08/06/2015 10:53:31 AM * Revision: none * Compiler: gcc * * Aut

在2005年,Unicode 的第十万个字符被采纳且认可成为标准之一(超过这65535范围的Unicode字符,则需要使用一些诡异的技巧来实现)

在计算机科学领域中,Unicode(统一码.万国码.单一码.标准万国码)是业界的一种标准,它可以使电脑得以体现世界上数十种文字的系统.Unicode 是基于通用字符集(Universal Character Set)的标准来发展,并且同时也以书本的形式[1]对外发表.Unicode 还不断在扩增, 每个新版本插入更多新的字符.直至目前为止的第六版,Unicode 就已经包含了超过十万个字符(在2005年,Unicode 的第十万个字符被采纳且认可成为标准之一).一组可用以作为视觉参考的代码图表.

C# 中文和UNICODE字符转换方法

这个方式其实很多见,特别是使用Json的时候用的比较多,其实也很简单主要是使用了ToString("x")方法直接看代码吧 string str = "大家好我是小哲"; string outStr = ""; if (!string.IsNullOrEmpty(str)) { for (int i = 0; i < str.Length; i++) { //将中文字符转为10进制整数,然后转为16进制unicode字符 outStr +=

Lex匹配unicode字符

想用lex&yacc写一个json的解析, 而json的string类型是包含unicode的, 词法解析工具Lex是不直接支持unicode字符匹配的, 那如果要想匹配unicode字符应该怎么办呢, 在stack overflow上看到一个很好的解答: http://stackoverflow.com/questions/9611682/flexlexer-support-for-unicode. 基本思想就是unicode字符写一个匹配模式, ASC [\x00-\x7f] ASCN [\

字符和字符串处理-ANSI字符和Unicode字符

我们知道,C语言用char数据类型表示一个8位的ANSI字符,默认在代码中声明一个字符串时,C编译器会把字符串中的字符转换成由8位char数据类型构成的一个数组: // An 8-bit character char c = 'A'; // An array of 99 8-bit character and 8-bit terminating zero char szBuffer[100] = "A String"; Microsoft的C/C++编译器定义了一个内建的数据类型wch

python print输出unicode字符

命令行提示符下,python print输出unicode字符时出现以下 UnicodeEncodeError: 'gbk' codec can't encode character '\u30fb 不能输出 unicode 字符,程序中断. 解决方法: sys.stdout = io.TextIOWrapper(sys.stdout.buffer, errors = 'replace', line_buffering = True) python print输出unicode字符,布布扣,bu