[Day29] 正规表达式 - 中英空白生成器实作

「曾经沧海难为水,中英不空眼睛痛」,每当看到文字没对齐、段落没缩排或者中文字遇英文字不加空白,就会感到焦虑。笔者虽然努力的想忽略,但还是被过去的职业病所困扰,想马上把滑鼠点过去帮他编辑。

VScode 有 Prettier 可以做到自动排版,我却还不会用程序帮别人加空白,想到这不禁潸然泪下。

来,今天就来做这件事。

进入主题,这几天写 String methods正规表达式发现似乎可以把加空白这件事情结合在一起。於是就开始找 RegExp 的字元类别character classes),也就是上一篇尾端有简单介绍的,原本想好好介绍的但抱歉实在太多了

除了特殊字元,还有很多代表的符号列如一些较常用的:
x|y 符合 x 或 y,用 | 分隔字符,可以像这样 w|x|y|z,一直或或或或或下去。
\d 符合数字 0-9
\s 符合空白
\w 符合数字跟字母与底线[A-Za-z0-9_]

先写出会换置的 code,在 indesign 里的写法是 (?<=~K)(\d|[\l\u]) ,意即英文或数字左边若为中字。
(?<=) 左合样
\d 数字 0-9
|
[\l\u] 英文大小写 [A-Za-z]

第二行是(\d|[\l\u])(?=~K),跟上段相同只是换成右合样(?=)

准备好开始到 Javascript 改写~

Unicode 中文字范围

[\u4e00-\u9fa5] 依照自己目前涉略的部分,JS 似乎只能用\u**** 来代表某中字,没有全中文字元这个字元类别,所以 google 到一个能代表中文范围的方式。

ASCII 字元

\w 如前篇所说,代表 ASCII 字元,等同於[A-Za-z0-9_]。
所以生成下面的 regexp:

var re1 = /([\u4e00-\u9fa5])(\w+)/gi;
// /括号1($1)左合样中文括号2($2)英数字/ gi是不区分大小写
var re2 = /(\w+)([\u4e00-\u9fa5])/gi;
// /括号1($1)英数字,括号2($2)右合样中文/ gi是不区分大小写
var str2 = "JavaScript是Web的主要语言。近25";
var newstr2 = str2.replace(re, " $1 ");
console.log(newstr2);

天啊!成功加空白啦!!!(codepen 实作连结:中英空分生成器)
↓↓↓↓↓↓操作过程↓↓↓↓↓↓

从今天开始好好的加空白吧~
十年前曾在作文簿写下,「尽自己的力量,让世界有一点不一样」眼泛泪光,觉得欣慰。

参考资料

MDN-正规表达式
wiki-正规表示式
前端藏宝图系列 第 6 篇 深不可测的海 - Regular Expression
郑RayLider


<<:  如何维持动力+铁人赛完赛心得

>>:  用React刻自己的投资Dashboard Day29 - 替股票加上名称

Day 24 | 在flutter 中串接 restful api - MobX的非同步操作

那今天就来让这个非同步资料透过MobX 来串接到画面上: 首先一样建立一个 UsersViewMod...

[Day??] 2021 iThome 铁人赛 - 颁奖典礼 @ 2022.01.08‧辅仁大学

前言 抱歉打扰了XD 但是我真的太想来分享,所以还是厚着脸皮(?)来po文了XD 我这次有参加铁人赛...

[DAY25]Istio延伸功能-Rate Limits限流

Rate Limits Rate Limits主要功能是防止request过量打爆服务,当同一来源的...

Day29 Android - 简易内嵌网页(webview)

今天主要要来在app内简易的嵌入一个网页(webview),webview不包含网路浏览器的所有功能...

DAY22-导览设计之Sidebar

前言: 今天我们要来完成前面提到的Sidebar,我会从Navbar接着开始接着讲,那就让我们开始...