中文字符正则匹配
在某些情况下,我们需要使用正则匹配出字符串中文字符。中文字的 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(四个字节表示)更节省存储,很快便得到了互联网的迅速推广使用。
参考:
- 中文标点符号 Unicode 码:blog.csdn.net/yuan8921737…
- Unicode: zh.wikipedia.org/wiki/Unicod…
- UTF-8: zh.wikipedia.org/wiki/UTF-8