中文字符正则匹配及 Unicode 编码

5,690 阅读2分钟

中文字符正则匹配

在某些情况下,我们需要使用正则匹配出字符串中文字符。中文字的 Unicode 编码范围为 \u4E00-\u9FA5。对应的正则为:

const reg = /[\u4e00-\u9fa5]/g;

除了中文字,有时候需要匹配中文标点符号,中文标点符号和中文字编码是分开的且不是连续的,常用符号 Unicode 编码见下表。因为中文符号的 Unicode 编码并不连续,所以如果要匹配所有中文符号就会比较麻烦,需要在正则中列出所有符号编码。例如:

// 以下正则匹配中文符号 。?!,、
const reg = /[\u3002\uFF1F\uFF01\uFF0C\u3001]/g;

这种方法显然不是很好。一个更好的匹配中文字和符号方法是匹配双字节字符(包含中文、日文、韩文等),/[\x00-\xff]/ 匹配单字节字符(如英文字母和符号),而/[^\x00-\xff]/ 匹配双字节字符。

// 前面的 ^ 符号为必须
const reg = /[^\x00-\xff]/
符号Unicode(正则前缀\u)名称
3002句号
FF1F问号
-------
FF01叹号
FF0C逗号
3001顿号
FF1B分号
---------
FF1A冒号
300C
300D
300E
300F
2018左单引号
2019右单引号
201C左双引号
201D右双引号
FF08左括号
FF09右括号
3014
3015
3010左中括号
-----------
3011右中括号
2014破折号
2026省略号
-2013连接号
·FF0E间隔号
300A左书名号
300B右书名号
3008左小书名号
3009右小书名号

Unicode 编码概念

Unicode 编码中文名为统一码,整理、编码了世界上大部分文字系统,为每一个字符给予一个独一无二的编码。Unicode 是一个字符集,它规定了字符的二进制代码,并没有规定这个二进制代码应该如何存储。

UTF-8就是 Unicode 的一种实现方式,也是互联网上使用最广的一种 Unicode 实现。它的最大一个特点是,它是一种边长的编码,它可以根据不同的字符使用1~4个字节来存储。相较于 Unicode 的 UTF-16(字符用两个或四个字节表示)和 UTF-32(四个字节表示)更节省存储,很快便得到了互联网的迅速推广使用。

参考: