中文字符正则匹配
在某些情况下,我们需要使用正则匹配出字符串中文字符。中文字的 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